Repository: thrift
Updated Branches:
  refs/heads/master c0e4a8dc0 -> 86a51e7ec


THRIFT-3170: Add a flag to allow the ignoring of common initialisms in Go
Client: Go
Patch: Paul Magrath <[email protected]>

This closes #508


Project: http://git-wip-us.apache.org/repos/asf/thrift/repo
Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/86a51e7e
Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/86a51e7e
Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/86a51e7e

Branch: refs/heads/master
Commit: 86a51e7eca0c33832b8e0421b18a99f4477dc31a
Parents: c0e4a8d
Author: Jens Geyer <[email protected]>
Authored: Mon Jun 1 20:41:41 2015 +0200
Committer: Jens Geyer <[email protected]>
Committed: Mon Jun 1 21:09:17 2015 +0200

----------------------------------------------------------------------
 compiler/cpp/src/generate/t_go_generator.cc | 16 ++++++--
 lib/go/test/IgnoreInitialismsTest.thrift    | 26 ++++++++++++
 lib/go/test/Makefile.am                     | 10 +++--
 lib/go/test/tests/ignoreinitialisms_test.go | 51 ++++++++++++++++++++++++
 4 files changed, 96 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/thrift/blob/86a51e7e/compiler/cpp/src/generate/t_go_generator.cc
----------------------------------------------------------------------
diff --git a/compiler/cpp/src/generate/t_go_generator.cc 
b/compiler/cpp/src/generate/t_go_generator.cc
index 1584e91..74d4b2f 100644
--- a/compiler/cpp/src/generate/t_go_generator.cc
+++ b/compiler/cpp/src/generate/t_go_generator.cc
@@ -97,6 +97,9 @@ public:
 
     iter = parsed_options.find("read_write_private");
     read_write_private_ = (iter != parsed_options.end());
+
+    iter = parsed_options.find("ignore_initialisms");
+    ignore_initialisms_ = (iter != parsed_options.end());
   }
 
   /**
@@ -282,6 +285,7 @@ private:
   std::string gen_package_prefix_;
   std::string gen_thrift_import_;
   bool read_write_private_;
+  bool ignore_initialisms_;
 
   /**
    * File streams
@@ -441,10 +445,12 @@ std::string t_go_generator::camelcase(const std::string& 
value) const {
 // Checks to see if the word starting at i in value contains a common 
initialism
 // and if so replaces it with the upper case version of the word.
 void t_go_generator::fix_common_initialism(std::string& value, int i) const {
-  std::string word = value.substr(i, value.find('_', i));
-  std::transform(word.begin(), word.end(), word.begin(), ::toupper);
-  if (commonInitialisms.find(word) != commonInitialisms.end()) {
-    value.replace(i, word.length(), word);
+  if (!ignore_initialisms_) {
+    std::string word = value.substr(i, value.find('_', i));
+    std::transform(word.begin(), word.end(), word.begin(), ::toupper);
+    if (commonInitialisms.find(word) != commonInitialisms.end()) {
+      value.replace(i, word.length(), word);
+    }
   }
 }
 
@@ -3574,5 +3580,7 @@ THRIFT_REGISTER_GENERATOR(go, "Go",
                           "    package_prefix=  Package prefix for generated 
files.\n" \
                           "    thrift_import=   Override thrift package import 
path (default:" + default_thrift_import + ")\n" \
                           "    package=         Package name (default: 
inferred from thrift file name)\n" \
+                          "    ignore_initialisms\n"
+                          "                     Disable automatic spelling 
correction of initialisms (e.g. \"URL\")\n" \
                           "    read_write_private\n"
                           "                     Make read/write methods 
private, default is public Read/Write\n")

http://git-wip-us.apache.org/repos/asf/thrift/blob/86a51e7e/lib/go/test/IgnoreInitialismsTest.thrift
----------------------------------------------------------------------
diff --git a/lib/go/test/IgnoreInitialismsTest.thrift 
b/lib/go/test/IgnoreInitialismsTest.thrift
new file mode 100644
index 0000000..0b30e9e
--- /dev/null
+++ b/lib/go/test/IgnoreInitialismsTest.thrift
@@ -0,0 +1,26 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+struct IgnoreInitialismsTest {
+    1: i64 id,
+    2: i64 my_id,
+    3: i64 num_cpu,
+    4: i64 num_gpu,
+    5: i64 my_ID,
+}

http://git-wip-us.apache.org/repos/asf/thrift/blob/86a51e7e/lib/go/test/Makefile.am
----------------------------------------------------------------------
diff --git a/lib/go/test/Makefile.am b/lib/go/test/Makefile.am
index 8cedfb0..14e2f78 100644
--- a/lib/go/test/Makefile.am
+++ b/lib/go/test/Makefile.am
@@ -36,7 +36,8 @@ gopath: $(THRIFT) $(THRIFTTEST) \
                                NamesTest.thrift \
                                InitialismsTest.thrift \
                                DontExportRWTest.thrift \
-                               dontexportrwtest/compile_test.go
+                               dontexportrwtest/compile_test.go \
+                               IgnoreInitialismsTest.thrift
        mkdir -p gopath/src
        grep -v list.*map.*list.*map $(THRIFTTEST) | grep -v 'set<Insanity>' > 
ThriftTest.thrift
        $(THRIFT) $(THRIFTARGS) -r IncludesTest.thrift
@@ -52,6 +53,7 @@ gopath: $(THRIFT) $(THRIFTTEST) \
        $(THRIFT) $(THRIFTARGS) NamesTest.thrift
        $(THRIFT) $(THRIFTARGS) InitialismsTest.thrift
        $(THRIFT) $(THRIFTARGS),read_write_private DontExportRWTest.thrift
+       $(THRIFT) $(THRIFTARGS),ignore_initialisms IgnoreInitialismsTest.thrift
        GOPATH=`pwd`/gopath $(GO) get code.google.com/p/gomock/gomock
        ln -nfs ../../../thrift gopath/src/thrift
        ln -nfs ../../tests gopath/src/tests
@@ -68,7 +70,8 @@ check: gopath
                                errortest       \
                                namestest \
                                initialismstest \
-                               dontexportrwtest
+                               dontexportrwtest \
+                               ignoreinitialismstest
        GOPATH=`pwd`/gopath $(GO) test thrift tests dontexportrwtest
 
 clean-local:
@@ -92,4 +95,5 @@ EXTRA_DIST = \
        ErrorTest.thrift \
        NamesTest.thrift \
        InitialismsTest.thrift \
-       DontExportRWTest.thrift
+       DontExportRWTest.thrift \
+       IgnoreInitialismsTest.thrift

http://git-wip-us.apache.org/repos/asf/thrift/blob/86a51e7e/lib/go/test/tests/ignoreinitialisms_test.go
----------------------------------------------------------------------
diff --git a/lib/go/test/tests/ignoreinitialisms_test.go 
b/lib/go/test/tests/ignoreinitialisms_test.go
new file mode 100644
index 0000000..3cd5f65
--- /dev/null
+++ b/lib/go/test/tests/ignoreinitialisms_test.go
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package tests
+
+import (
+       "ignoreinitialismstest"
+       "reflect"
+       "testing"
+)
+
+func TestIgnoreInitialismsFlagIsHonoured(t *testing.T) {
+       s := ignoreinitialismstest.IgnoreInitialismsTest{}
+       st := reflect.TypeOf(s)
+       _, ok := st.FieldByName("Id")
+       if !ok {
+               t.Error("Id attribute is missing!")
+       }
+       _, ok = st.FieldByName("MyId")
+       if !ok {
+               t.Error("MyId attribute is missing!")
+       }
+       _, ok = st.FieldByName("NumCpu")
+       if !ok {
+               t.Error("NumCpu attribute is missing!")
+       }
+       _, ok = st.FieldByName("NumGpu")
+       if !ok {
+               t.Error("NumGpu attribute is missing!")
+       }
+       _, ok = st.FieldByName("My_ID")
+       if !ok {
+               t.Error("My_ID attribute is missing!")
+       }
+}

Reply via email to