Branch: refs/heads/master Author: Colomban Wendling ban@herbesfolles.org Committer: Colomban Wendling ban@herbesfolles.org Date: Mon, 15 Apr 2013 16:47:54 UTC Commit: d283eb243cba5c83c2762d01aa025f357d7d2ad1 https://github.com/geany/geany/commit/d283eb243cba5c83c2762d01aa025f357d7d2a...
Log Message: ----------- PHP: parse and report interfaces
Modified Paths: -------------- tagmanager/ctags/php.c
Modified: tagmanager/ctags/php.c 36 files changed, 23 insertions(+), 13 deletions(-) =================================================================== @@ -99,15 +99,17 @@ K_CLASS, K_DEFINE, K_FUNCTION, + K_INTERFACE, K_VARIABLE, COUNT_KIND } phpKind;
static kindOption PhpKinds[COUNT_KIND] = { - { TRUE, 'c', "class", "classes" }, - { TRUE, 'm', "macro", "constant definitions" }, - { TRUE, 'f', "function", "functions" }, - { TRUE, 'v', "variable", "variables" } + { TRUE, 'c', "class", "classes" }, + { TRUE, 'm', "macro", "constant definitions" }, + { TRUE, 'f', "function", "functions" }, + { TRUE, 'i', "interface", "interfaces" }, + { TRUE, 'v', "variable", "variables" } };
typedef struct { @@ -289,13 +291,14 @@ static void makeSimplePhpTag (tokenInfo *const token, phpKind kind, accessType a } }
-static void makeClassTag (tokenInfo *const token, vString *const inheritance, implType impl) +static void makeClassOrIfaceTag (phpKind kind, tokenInfo *const token, + vString *const inheritance, implType impl) { - if (PhpKinds[K_CLASS].enabled) + if (PhpKinds[kind].enabled) { tagEntryInfo e;
- initPhpEntry (&e, token, K_CLASS, ACCESS_UNDEFINED); + initPhpEntry (&e, token, kind, ACCESS_UNDEFINED);
if (impl != IMPL_UNDEFINED) e.extensionFields.implementation = implToString (impl); @@ -687,7 +690,13 @@ static void readToken (tokenInfo *const token)
static void enterScope (tokenInfo *const token, vString *const scope, int parentKind);
-static boolean parseClass (tokenInfo *const token) +/* parses a class or an interface: + * class Foo {} + * class Foo extends Bar {} + * class Foo extends Bar implements iFoo, iBar {} + * interface iFoo {} + * interface iBar extends iFoo {} */ +static boolean parseClassOrIface (tokenInfo *const token, phpKind kind) { boolean readNext = TRUE; implType impl = CurrentStatement.impl; @@ -718,7 +727,7 @@ static boolean parseClass (tokenInfo *const token) while (token->type != TOKEN_EOF && token->type != TOKEN_OPEN_CURLY);
- makeClassTag (name, inheritance, impl); + makeClassOrIfaceTag (kind, name, inheritance, impl);
if (token->type == TOKEN_OPEN_CURLY) enterScope (token, name->string, K_CLASS); @@ -899,10 +908,11 @@ static void enterScope (tokenInfo *const parentToken, vString *const extraScope, case TOKEN_KEYWORD: switch (token->keyword) { - case KEYWORD_class: readNext = parseClass (token); break; - case KEYWORD_function: readNext = parseFunction (token); break; - case KEYWORD_const: readNext = parseConstant (token); break; - case KEYWORD_define: readNext = parseDefine (token); break; + case KEYWORD_class: readNext = parseClassOrIface (token, K_CLASS); break; + case KEYWORD_interface: readNext = parseClassOrIface (token, K_INTERFACE); break; + case KEYWORD_function: readNext = parseFunction (token); break; + case KEYWORD_const: readNext = parseConstant (token); break; + case KEYWORD_define: readNext = parseDefine (token); break;
case KEYWORD_private: CurrentStatement.access = ACCESS_PRIVATE; break; case KEYWORD_protected: CurrentStatement.access = ACCESS_PROTECTED; break;
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).