Branch: refs/heads/master Author: Colomban Wendling ban@herbesfolles.org Committer: Colomban Wendling ban@herbesfolles.org Date: Thu, 13 Sep 2012 14:34:18 Commit: f1e88ca311af3c3ced49f4b348d88140a74302b0 https://github.com/geany/geany/commit/f1e88ca311af3c3ced49f4b348d88140a74302...
Log Message: ----------- Ruby parser: don't create an extra scope after "for .. in .. do"
When "do" appears as the separator after a "for", "while" or "until" construct, don't improperly make it start its own scope too.
Modified Paths: -------------- tagmanager/ctags/ruby.c
Modified: tagmanager/ctags/ruby.c 26 files changed, 23 insertions(+), 3 deletions(-) =================================================================== @@ -287,6 +287,9 @@ static void findRubyTags (void) while ((line = fileReadLine ()) != NULL) { const unsigned char *cp = line; + /* if we expect a separator after a while, for, or until statement + * separators are "do", ";" or newline */ + boolean expect_separator = FALSE;
if (canMatch (&cp, "=begin")) { @@ -318,10 +321,15 @@ static void findRubyTags (void) * puts("hello") \ * unless <exp> */ - if (canMatch (&cp, "case") || canMatch (&cp, "for") || - canMatch (&cp, "if") || canMatch (&cp, "unless") || + if (canMatch (&cp, "for") || canMatch (&cp, "until") || canMatch (&cp, "while")) { + expect_separator = TRUE; + enterUnnamedScope (); + } + else if (canMatch (&cp, "case") || canMatch (&cp, "if") || + canMatch (&cp, "unless")) + { enterUnnamedScope (); }
@@ -362,10 +370,17 @@ static void findRubyTags (void) */ break; } - else if (canMatch (&cp, "begin") || canMatch (&cp, "do")) + else if (canMatch (&cp, "begin")) { enterUnnamedScope (); } + else if (canMatch (&cp, "do")) + { + if (! expect_separator) + enterUnnamedScope (); + else + expect_separator = FALSE; + } else if (canMatch (&cp, "end") && stringListCount (nesting) > 0) { /* Leave the most recent scope. */ @@ -383,6 +398,11 @@ static void findRubyTags (void) if (*cp == '"') cp++; /* skip the last found '"' */ } + else if (*cp == ';') + { + ++cp; + expect_separator = FALSE; + } else if (*cp != '\0') { do
@@ Diff output truncated at 100000 characters. @@
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: TBD).