Branch: refs/heads/master Author: Colomban Wendling ban@herbesfolles.org Committer: Colomban Wendling ban@herbesfolles.org Date: Mon, 15 Apr 2013 16:43:22 UTC Commit: 23339dd509947f8e4322793580943607d4a77fc4 https://github.com/geany/geany/commit/23339dd509947f8e4322793580943607d4a77f...
Log Message: ----------- PHP: report class inheritance
Modified Paths: -------------- tagmanager/ctags/php.c
Modified: tagmanager/ctags/php.c 20 files changed, 17 insertions(+), 3 deletions(-) =================================================================== @@ -289,7 +289,7 @@ static void makeSimplePhpTag (tokenInfo *const token, phpKind kind, accessType a } }
-static void makeClassTag (tokenInfo *const token, implType impl) +static void makeClassTag (tokenInfo *const token, vString *const inheritance, implType impl) { if (PhpKinds[K_CLASS].enabled) { @@ -299,6 +299,8 @@ static void makeClassTag (tokenInfo *const token, implType impl)
if (impl != IMPL_UNDEFINED) e.extensionFields.implementation = implToString (impl); + if (vStringLength (inheritance) > 0) + e.extensionFields.inheritance = vStringValue (inheritance);
makeTagEntry (&e); } @@ -690,6 +692,7 @@ static boolean parseClass (tokenInfo *const token) boolean readNext = TRUE; implType impl = CurrentStatement.impl; tokenInfo *name; + vString *inheritance = NULL;
readToken (token); if (token->type != TOKEN_IDENTIFIER) @@ -697,22 +700,33 @@ static boolean parseClass (tokenInfo *const token)
name = newToken (); copyToken (name, token, TRUE); - makeClassTag (name, impl);
- /* skip over possible "extends FOO, BAR" */ + inheritance = vStringNew (); + /* skip until the open bracket and assume every identifier (not keyword) + * is an inheritance (like in "class Foo extends Bar implements iA, iB") */ do { readToken (token); + + if (token->type == TOKEN_IDENTIFIER) + { + if (vStringLength (inheritance) > 0) + vStringPut (inheritance, ','); + vStringCat (inheritance, token->string); + } } while (token->type != TOKEN_EOF && token->type != TOKEN_OPEN_CURLY);
+ makeClassTag (name, inheritance, impl); + if (token->type == TOKEN_OPEN_CURLY) enterScope (token, name->string, K_CLASS); else readNext = FALSE;
deleteToken (name); + vStringDelete (inheritance);
return readNext; }
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).