Skip to content

Commit ec6c2c4

Browse files
author
Federico Fissore
committed
Updating ctags and ensuring namespaces are ignored when generating prototypes.
Fixes #44 Signed-off-by: Federico Fissore <[email protected]>
1 parent 95fc10e commit ec6c2c4

File tree

6 files changed

+83
-6
lines changed

6 files changed

+83
-6
lines changed

Diff for: src/arduino.cc/builder/ctags_parser.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,14 @@ const FIELD_CODE = "code"
4545
const FIELD_FUNCTION_NAME = "functionName"
4646
const FIELD_CLASS = "class"
4747
const FIELD_STRUCT = "struct"
48+
const FIELD_NAMESPACE = "namespace"
4849
const FIELD_SKIP = "skipMe"
4950

5051
const KIND_PROTOTYPE = "prototype"
5152

5253
const TEMPLATE = "template"
5354

54-
var FIELDS = map[string]bool{"kind": true, "line": true, "typeref": true, "signature": true, "returntype": true, "class": true, "struct": true}
55+
var FIELDS = map[string]bool{"kind": true, "line": true, "typeref": true, "signature": true, "returntype": true, "class": true, "struct": true, "namespace": true}
5556
var KNOWN_TAG_KINDS = map[string]bool{"prototype": true, "function": true}
5657

5758
type CTagsParser struct {
@@ -71,6 +72,7 @@ func (s *CTagsParser) Run(context map[string]interface{}) error {
7172
tags = filterOutUnknownTags(tags)
7273
tags = filterOutTagsWithField(tags, FIELD_CLASS)
7374
tags = filterOutTagsWithField(tags, FIELD_STRUCT)
75+
tags = filterOutTagsWithField(tags, FIELD_NAMESPACE)
7476
tags = skipTagsWhere(tags, signatureContainsDefaultArg)
7577
tags = addPrototypes(tags)
7678
tags = removeDefinedProtypes(tags)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
value /tmp/test030883150/preproc/ctags_target.cpp /^ int value() {$/;" kind:function line:3 namespace:Test signature:() returntype:int
2+
setup /tmp/test030883150/preproc/ctags_target.cpp /^void setup() {}$/;" kind:function line:8 signature:() returntype:void
3+
loop /tmp/test030883150/preproc/ctags_target.cpp /^void loop() {}$/;" kind:function line:9 signature:() returntype:void
4+

Diff for: src/arduino.cc/builder/test/ctags_parser_test.go

+18
Original file line numberDiff line numberDiff line change
@@ -225,3 +225,21 @@ func TestCTagsParserDefaultArguments(t *testing.T) {
225225
require.Equal(t, "void setup();", prototypes[0].Prototype)
226226
require.Equal(t, "void loop();", prototypes[1].Prototype)
227227
}
228+
229+
func TestCTagsParserNamespace(t *testing.T) {
230+
context := make(map[string]interface{})
231+
232+
bytes, err := ioutil.ReadFile(filepath.Join("ctags_output", "TestCTagsParserNamespace.txt"))
233+
NoError(t, err)
234+
235+
context[constants.CTX_CTAGS_OUTPUT] = string(bytes)
236+
237+
ctagsParser := builder.CTagsParser{PrototypesField: constants.CTX_PROTOTYPES}
238+
ctagsParser.Run(context)
239+
240+
prototypes := context[constants.CTX_PROTOTYPES].([]*types.Prototype)
241+
242+
require.Equal(t, 2, len(prototypes))
243+
require.Equal(t, "void setup();", prototypes[0].Prototype)
244+
require.Equal(t, "void loop();", prototypes[1].Prototype)
245+
}

Diff for: src/arduino.cc/builder/test/ctags_runner_test.go

+45
Original file line numberDiff line numberDiff line change
@@ -181,3 +181,48 @@ func TestCTagsRunnerSketchWithTypename(t *testing.T) {
181181

182182
require.Equal(t, expectedOutput, strings.Replace(context[constants.CTX_CTAGS_OUTPUT].(string), "\r\n", "\n", -1))
183183
}
184+
185+
func TestCTagsRunnerSketchWithNamespace(t *testing.T) {
186+
DownloadCoresAndToolsAndLibraries(t)
187+
188+
context := make(map[string]interface{})
189+
190+
buildPath := SetupBuildPath(t, context)
191+
defer os.RemoveAll(buildPath)
192+
193+
context[constants.CTX_HARDWARE_FOLDERS] = []string{filepath.Join("..", "hardware"), "hardware", "downloaded_hardware"}
194+
context[constants.CTX_TOOLS_FOLDERS] = []string{"downloaded_tools"}
195+
context[constants.CTX_FQBN] = "arduino:avr:leonardo"
196+
context[constants.CTX_SKETCH_LOCATION] = filepath.Join("sketch_with_namespace", "sketch.ino")
197+
context[constants.CTX_BUILD_PROPERTIES_RUNTIME_IDE_VERSION] = "10600"
198+
context[constants.CTX_BUILT_IN_LIBRARIES_FOLDERS] = []string{"downloaded_libraries"}
199+
context[constants.CTX_OTHER_LIBRARIES_FOLDERS] = []string{"libraries"}
200+
context[constants.CTX_VERBOSE] = true
201+
202+
commands := []types.Command{
203+
&builder.SetupHumanLoggerIfMissing{},
204+
205+
&builder.ContainerSetupHardwareToolsLibsSketchAndProps{},
206+
207+
&builder.ContainerMergeCopySketchFiles{},
208+
209+
&builder.ContainerFindIncludes{},
210+
211+
&builder.PrintUsedLibrariesIfVerbose{},
212+
&builder.WarnAboutArchIncompatibleLibraries{},
213+
&builder.CTagsTargetFileSaver{SourceField: constants.CTX_SOURCE},
214+
&builder.CTagsRunner{},
215+
}
216+
217+
for _, command := range commands {
218+
err := command.Run(context)
219+
NoError(t, err)
220+
}
221+
222+
ctagsTempFileName := context[constants.CTX_CTAGS_TEMP_FILE_NAME].(string)
223+
expectedOutput := "value\t" + ctagsTempFileName + "\t/^\tint value() {$/;\"\tkind:function\tline:3\tnamespace:Test\tsignature:()\treturntype:int\n" +
224+
"setup\t" + ctagsTempFileName + "\t/^void setup() {}$/;\"\tkind:function\tline:8\tsignature:()\treturntype:void\n" +
225+
"loop\t" + ctagsTempFileName + "\t/^void loop() {}$/;\"\tkind:function\tline:9\tsignature:()\treturntype:void\n"
226+
227+
require.Equal(t, expectedOutput, strings.Replace(context[constants.CTX_CTAGS_OUTPUT].(string), "\r\n", "\n", -1))
228+
}

Diff for: src/arduino.cc/builder/test/helper_tools_downloader.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,12 @@ func DownloadCoresAndToolsAndLibraries(t *testing.T) {
108108
OsUrl{Os: "i686-mingw32", Url: "http://downloads.arduino.cc/tools/coan-5.2-i686-mingw32.zip"},
109109
OsUrl{Os: "x86_64-apple-darwin", Url: "http://downloads.arduino.cc/tools/coan-5.2-x86_64-apple-darwin.zip"},
110110
}},
111-
Tool{Name: "ctags", Version: "5.8-arduino2",
111+
Tool{Name: "ctags", Version: "5.8-arduino3",
112112
OsUrls: []OsUrl{
113-
OsUrl{Os: "i686-pc-linux-gnu", Url: "http://downloads.arduino.cc/tools/ctags-5.8-arduino2-i686-pc-linux-gnu.tar.bz2"},
114-
OsUrl{Os: "x86_64-pc-linux-gnu", Url: "http://downloads.arduino.cc/tools/ctags-5.8-arduino2-x86_64-pc-linux-gnu.tar.bz2"},
115-
OsUrl{Os: "i686-mingw32", Url: "http://downloads.arduino.cc/tools/ctags-5.8-arduino2-i686-mingw32.zip"},
116-
OsUrl{Os: "x86_64-apple-darwin", Url: "http://downloads.arduino.cc/tools/ctags-5.8-arduino2-x86_64-apple-darwin.zip"},
113+
OsUrl{Os: "i686-pc-linux-gnu", Url: "http://downloads.arduino.cc/tools/ctags-5.8-arduino3-i686-pc-linux-gnu.tar.bz2"},
114+
OsUrl{Os: "x86_64-pc-linux-gnu", Url: "http://downloads.arduino.cc/tools/ctags-5.8-arduino3-x86_64-pc-linux-gnu.tar.bz2"},
115+
OsUrl{Os: "i686-mingw32", Url: "http://downloads.arduino.cc/tools/ctags-5.8-arduino3-i686-mingw32.zip"},
116+
OsUrl{Os: "x86_64-apple-darwin", Url: "http://downloads.arduino.cc/tools/ctags-5.8-arduino3-x86_64-apple-darwin.zip"},
117117
}},
118118
}
119119

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace Test {
2+
int value() {
3+
return 42;
4+
}
5+
int ciao = 24;
6+
}
7+
void setup() {}
8+
void loop() {}

0 commit comments

Comments
 (0)