SF.net SVN: geany:[4768] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Wed Mar 17 13:39:18 UTC 2010
Revision: 4768
http://geany.svn.sourceforge.net/geany/?rev=4768&view=rev
Author: ntrel
Date: 2010-03-17 13:39:18 +0000 (Wed, 17 Mar 2010)
Log Message:
-----------
Apply patch from Colomban Wendling to parse Python lambda functions
(thanks) - modified to only parse toplevel or class member lambdas.
Modified Paths:
--------------
trunk/ChangeLog
trunk/tagmanager/python.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2010-03-17 04:34:33 UTC (rev 4767)
+++ trunk/ChangeLog 2010-03-17 13:39:18 UTC (rev 4768)
@@ -1,9 +1,17 @@
+2010-03-17 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * tagmanager/python.c:
+ Apply patch from Colomban Wendling to parse Python lambda functions
+ (thanks) - modified to only parse toplevel or class member lambdas.
+
+
2010-03-17 Lex Trotman <elextr.at.gmail.dot.com>
- * src/build.c
+ * src/build.c:
Fix using return value without checking return status, caused
incorrect sensitivity settings on build dialog.
+
2010-03-16 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
* HACKING:
@@ -11,6 +19,7 @@
Add Testing section.
Update Libraries section about synchronizing with other projects.
+
2010-03-15 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* src/ui_utils.c:
Modified: trunk/tagmanager/python.c
===================================================================
--- trunk/tagmanager/python.c 2010-03-17 04:34:33 UTC (rev 4767)
+++ trunk/tagmanager/python.c 2010-03-17 13:39:18 UTC (rev 4768)
@@ -534,6 +534,49 @@
return NULL;
}
+/* checks if there is a lambda at position of cp, and return its argument list
+ * if so.
+ * We don't return the lambda name since it is useless for now since we already
+ * know it when we call this function, and it would be a little slower. */
+static boolean varIsLambda (const char *cp, char **arglist)
+{
+ boolean is_lambda = FALSE;
+
+ cp = skipSpace (cp);
+ cp = skipIdentifier (cp); /* skip the lambda's name */
+ cp = skipSpace (cp);
+ if (*cp == '=')
+ {
+ cp++;
+ cp = skipSpace (cp);
+ if (strncmp (cp, "lambda", 6) == 0)
+ {
+ const char *tmp;
+
+ cp += 6; /* skip the lambda */
+ tmp = skipSpace (cp);
+ /* check if there is a space after lambda to detect assignations
+ * starting with 'lambdaXXX' */
+ if (tmp != cp)
+ {
+ vString *args = vStringNew ();
+
+ cp = tmp;
+ vStringPut (args, '(');
+ for (; *cp != 0 && *cp != ':'; cp++)
+ vStringPut (args, *cp);
+ vStringPut (args, ')');
+ vStringTerminate (args);
+ if (arglist)
+ *arglist = strdup (vStringValue (args));
+ vStringDelete (args);
+ is_lambda = TRUE;
+ }
+ }
+ }
+ return is_lambda;
+}
+
static void findPythonTags (void)
{
vString *const continuation = vStringNew ();
@@ -656,6 +699,7 @@
if (variable)
{
const char *start = variable;
+ char *arglist;
boolean parent_is_class;
vStringClear (name);
@@ -667,11 +711,21 @@
vStringTerminate (name);
parent_is_class = constructParentString(nesting_levels, indent, parent);
- /* skip variables in methods */
- if (! parent_is_class && vStringLength(parent) > 0)
- continue;
+ 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)
+ continue;
- makeVariableTag (name, parent);
+ makeVariableTag (name, parent);
+ }
}
/* Find and parse imports */
parseImports(line);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list