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!") + } +}
