[geany/geany] 9e9774: ruby: Use nestlevel instead of string lists
Colomban Wendling
git-noreply at xxxxx
Mon Mar 14 18:27:22 UTC 2016
Branch: refs/heads/master
Author: Colomban Wendling <ban at herbesfolles.org>
Committer: Colomban Wendling <ban at herbesfolles.org>
Date: Mon, 14 Mar 2016 18:27:22 UTC
Commit: 9e9774675173fe45c8372540512a2581bb105c4d
https://github.com/geany/geany/commit/9e9774675173fe45c8372540512a2581bb105c4d
Log Message:
-----------
ruby: Use nestlevel instead of string lists
This will simplify some upcoming fixes.
Modified Paths:
--------------
tagmanager/ctags/ruby.c
Modified: tagmanager/ctags/ruby.c
32 lines changed, 17 insertions(+), 15 deletions(-)
===================================================================
@@ -19,6 +19,7 @@
#include "entry.h"
#include "parse.h"
+#include "nestlevel.h"
#include "read.h"
#include "vstring.h"
@@ -41,7 +42,7 @@ static kindOption RubyKinds [] = {
{ TRUE, 'C', "context", "contexts" }
};
-static stringList* nesting = NULL;
+static NestingLevels* nesting = NULL;
#define SCOPE_SEPARATOR '.'
@@ -52,22 +53,21 @@ static stringList* nesting = NULL;
static void enterUnnamedScope (void);
/*
-* Returns a string describing the scope in 'list'.
+* Returns a string describing the scope in 'nls'.
* We record the current scope as a list of entered scopes.
* Scopes corresponding to 'if' statements and the like are
* represented by empty strings. Scopes corresponding to
* modules and classes are represented by the name of the
* module or class.
*/
-static vString* stringListToScope (const stringList* list)
+static vString* nestingLevelsToScope (const NestingLevels* nls)
{
- unsigned int i;
+ int i;
unsigned int chunks_output = 0;
vString* result = vStringNew ();
- const unsigned int max = stringListCount (list);
- for (i = 0; i < max; ++i)
+ for (i = 0; i < nls->n; ++i)
{
- vString* chunk = stringListItem (list, i);
+ const vString* chunk = nls->levels[i].name;
if (vStringLength (chunk) > 0)
{
if (chunks_output++ > 0)
@@ -178,7 +178,7 @@ static void emitRubyTag (vString* name, rubyKind kind)
}
vStringTerminate (name);
- scope = stringListToScope (nesting);
+ scope = nestingLevelsToScope (nesting);
qualified_name = vStringValue (name);
unqualified_name = strrchr (qualified_name, SCOPE_SEPARATOR);
@@ -205,7 +205,7 @@ static void emitRubyTag (vString* name, rubyKind kind)
tag.kind = RubyKinds [kind].letter;
makeTagEntry (&tag);
- stringListAdd (nesting, vStringNewCopy (name));
+ nestingLevelsPush (nesting, name, kind);
vStringClear (name);
vStringDelete (scope);
@@ -355,7 +355,10 @@ static void readAndEmitTag (const unsigned char** cp, rubyKind expected_kind)
static void enterUnnamedScope (void)
{
- stringListAdd (nesting, vStringNewInit (""));
+ vString *name = vStringNewInit ("");
+ NestingLevel *parent = nestingLevelsGetCurrent (nesting);
+ nestingLevelsPush (nesting, name, parent ? parent->type : K_UNDEFINED);
+ vStringDelete (name);
}
static void findRubyTags (void)
@@ -363,7 +366,7 @@ static void findRubyTags (void)
const unsigned char *line;
boolean inMultiLineComment = FALSE;
- nesting = stringListNew ();
+ nesting = nestingLevelsNew ();
/* FIXME: this whole scheme is wrong, because Ruby isn't line-based.
* You could perfectly well write:
@@ -484,11 +487,10 @@ static void findRubyTags (void)
else
expect_separator = FALSE;
}
- else if (canMatchKeyword (&cp, "end") && stringListCount (nesting) > 0)
+ else if (canMatchKeyword (&cp, "end") && nesting->n > 0)
{
/* Leave the most recent scope. */
- vStringDelete (stringListLast (nesting));
- stringListRemoveLast (nesting);
+ nestingLevelsPop (nesting);
}
else if (*cp == '"')
{
@@ -514,7 +516,7 @@ static void findRubyTags (void)
}
}
}
- stringListDelete (nesting);
+ nestingLevelsFree (nesting);
}
extern parserDefinition* RubyParser (void)
--------------
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