[geany/geany] d8aaa5: Python: fix parsing of variables assigned to triple quoted strings

Colomban Wendling git-noreply at xxxxx
Mon May 12 19:52:03 UTC 2014


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Mon, 12 May 2014 19:52:03 UTC
Commit:      d8aaa59f9ab506e92f474bd9007127a6dbac016c
             https://github.com/geany/geany/commit/d8aaa59f9ab506e92f474bd9007127a6dbac016c

Log Message:
-----------
Python: fix parsing of variables assigned to triple quoted strings

Fixes #262.


Modified Paths:
--------------
    tagmanager/ctags/python.c
    tests/ctags/bug1906062.py.tags

Modified: tagmanager/ctags/python.c
66 lines changed, 32 insertions(+), 34 deletions(-)
===================================================================
@@ -727,6 +727,38 @@ static void findPythonTags (void)
 		
 		checkParent(nesting_levels, indent, parent);
 
+		/* Find global and class variables */
+		variable = findVariable(line);
+		if (variable)
+		{
+			const char *start = variable;
+			char *arglist;
+			boolean parent_is_class;
+
+			vStringClear (name);
+			while (isIdentifierCharacter ((int) *start))
+			{
+				vStringPut (name, (int) *start);
+				++start;
+			}
+			vStringTerminate (name);
+
+			parent_is_class = constructParentString(nesting_levels, indent, parent);
+			if (varIsLambda (variable, &arglist))
+			{
+				/* show class members or top-level script lambdas only */
+				if (parent_is_class || vStringLength(parent) == 0)
+					makeFunctionTag (name, parent, parent_is_class, arglist);
+				eFree (arglist);
+			}
+			else
+			{
+				/* skip variables in methods */
+				if (parent_is_class || vStringLength(parent) == 0)
+					makeVariableTag (name, parent);
+			}
+		}
+
 		/* Deal with multiline string start. */
 		longstring = find_triple_start(cp, &longStringLiteral);
 		if (longstring)
@@ -787,40 +819,6 @@ static void findPythonTags (void)
 				addNestingLevel(nesting_levels, indent, name, is_class);
 			}
 		}
-		/* Find global and class variables */
-		variable = findVariable(line);
-		if (variable)
-		{
-			const char *start = variable;
-			char *arglist;
-			boolean parent_is_class;
-
-			vStringClear (name);
-			while (isIdentifierCharacter ((int) *start))
-			{
-				vStringPut (name, (int) *start);
-				++start;
-			}
-			vStringTerminate (name);
-
-			parent_is_class = constructParentString(nesting_levels, indent, parent);
-			if (varIsLambda (variable, &arglist))
-			{
-				/* show class members or top-level script lambdas only */
-				if (parent_is_class || vStringLength(parent) == 0)
-					makeFunctionTag (name, parent, parent_is_class, arglist);
-				if (arglist != NULL)
-					eFree (arglist);
-			}
-			else
-			{
-				/* skip variables in methods */
-				if (! parent_is_class && vStringLength(parent) > 0)
-					continue;
-
-				makeVariableTag (name, parent);
-			}
-		}
 		/* Find and parse imports */
 		parseImports(line);
 	}


Modified: tests/ctags/bug1906062.py.tags
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -1,2 +1,3 @@
 # format=tagmanager
 dummyÌ1Ö0
+include_fileÌ16384Ö0



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list