From a499a10833d525c9af794c616dc40f7425110c71 Mon Sep 17 00:00:00 2001 From: Colin Watson Date: Sat, 27 Sep 2014 14:37:19 +0100 Subject: Changed the javascript parser to set the tag's scope rather than including it in the tag name. Patch from Colomban. Author: David Fishburn Origin: upstream, http://sourceforge.net/p/ctags/code/791/ Bug-Debian: https://bugs.debian.org/742605 Last-Update: 2014-09-27 Patch-Name: jscript-set-tag-scope.patch --- jscript.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/jscript.c b/jscript.c index 5de3367..a790355 100644 --- a/jscript.c +++ b/jscript.c @@ -215,6 +215,7 @@ static void deleteToken (tokenInfo *const token) * Tag generation functions */ +/* static void makeConstTag (tokenInfo *const token, const jsKind kind) { if (JsKinds [kind].enabled && ! token->ignoreTag ) @@ -238,12 +239,13 @@ static void makeJsTag (tokenInfo *const token, const jsKind kind) if (JsKinds [kind].enabled && ! token->ignoreTag ) { - /* + * * If a scope has been added to the token, change the token * string to include the scope when making the tag. - */ + * if ( vStringLength(token->scope) > 0 ) { + * fulltag = vStringNew (); vStringCopy(fulltag, token->scope); vStringCatS (fulltag, "."); @@ -251,8 +253,54 @@ static void makeJsTag (tokenInfo *const token, const jsKind kind) vStringTerminate(fulltag); vStringCopy(token->string, fulltag); vStringDelete (fulltag); + * + jsKind parent_kind = JSTAG_CLASS; + + * + * if we're creating a function (and not a method), + * guess we're inside another function + * + if (kind == JSTAG_FUNCTION) + parent_kind = JSTAG_FUNCTION; + + e.extensionFields.scope[0] = JsKinds [parent_kind].name; + e.extensionFields.scope[1] = vStringValue (token->scope); + } + * makeConstTag (token, kind); * + makeTagEntry (&e); + } +} +*/ + +static void makeJsTag (tokenInfo *const token, const jsKind kind) +{ + if (JsKinds [kind].enabled && ! token->ignoreTag ) + { + const char *const name = vStringValue (token->string); + tagEntryInfo e; + initTagEntry (&e, name); + + e.lineNumber = token->lineNumber; + e.filePosition = token->filePosition; + e.kindName = JsKinds [kind].name; + e.kind = JsKinds [kind].letter; + + if ( vStringLength(token->scope) > 0 ) + { + jsKind parent_kind = JSTAG_CLASS; + + /* + * If we're creating a function (and not a method), + * guess we're inside another function + */ + if (kind == JSTAG_FUNCTION) + parent_kind = JSTAG_FUNCTION; + + e.extensionFields.scope[0] = JsKinds [parent_kind].name; + e.extensionFields.scope[1] = vStringValue (token->scope); } - makeConstTag (token, kind); + + makeTagEntry (&e); } }