[geany/geany] 08fe91: SQL: report scope as such, not as part of the tag name

Colomban Wendling git-noreply at xxxxx
Wed Jun 26 14:33:35 UTC 2013


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Wed, 26 Jun 2013 14:33:35 UTC
Commit:      08fe915ce8b4ed180f16e43becdfa8c177d02032
             https://github.com/geany/geany/commit/08fe915ce8b4ed180f16e43becdfa8c177d02032

Log Message:
-----------
SQL: report scope as such, not as part of the tag name


Modified Paths:
--------------
    tagmanager/ctags/sql.c
    tests/ctags/3184782.sql.tags
    tests/ctags/bug1570779.sql.tags
    tests/ctags/bug1938565.sql.tags
    tests/ctags/bug1944150.sql.tags
    tests/ctags/bug823000.sql.tags
    tests/ctags/db-trig.sql.tags
    tests/ctags/random.sql.tags
    tests/ctags/readlob.sql.tags
    tests/ctags/readlong.sql.tags
    tests/ctags/refcurs.sql.tags

Modified: tagmanager/ctags/sql.c
81 files changed, 41 insertions(+), 40 deletions(-)
===================================================================
@@ -169,6 +169,7 @@
 	keywordId	keyword;
 	vString *	string;
 	vString *	scope;
+	int         scopeKind;
 	int         begin_end_nest_lvl;
 	unsigned long lineNumber;
 	MIOPos filePosition;
@@ -424,6 +425,7 @@ static tokenInfo *newToken (void)
 	token->keyword            = KEYWORD_NONE;
 	token->string             = vStringNew ();
 	token->scope              = vStringNew ();
+	token->scopeKind          = SQLTAG_COUNT;
 	token->begin_end_nest_lvl = 0;
 	token->lineNumber         = getSourceLineNumber ();
 	token->filePosition       = getInputFilePosition ();
@@ -452,7 +454,7 @@ static int analyzeToken (vString *const name, langType language)
  *	 Tag generation functions
  */
 
-static void makeConstTag (tokenInfo *const token, const sqlKind kind)
+static void makeSqlTag (tokenInfo *const token, const sqlKind kind)
 {
 	if (SqlKinds [kind].enabled)
 	{
@@ -465,31 +467,14 @@ static void makeConstTag (tokenInfo *const token, const sqlKind kind)
 		e.kindName	   = SqlKinds [kind].name;
 		e.kind		   = SqlKinds [kind].letter;
 
-		makeTagEntry (&e);
-	}
-}
-
-static void makeSqlTag (tokenInfo *const token, const sqlKind kind)
-{
-	vString *	fulltag;
-
-	if (SqlKinds [kind].enabled)
-	{
-		/*
-		 * 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 )
+		if (vStringLength (token->scope) > 0)
 		{
-			fulltag = vStringNew ();
-			vStringCopy(fulltag, token->scope);
-			vStringCatS (fulltag, ".");
-			vStringCatS (fulltag, vStringValue(token->string));
-			vStringTerminate(fulltag);
-			vStringCopy(token->string, fulltag);
-			vStringDelete (fulltag);
+			Assert (token->scopeKind < SQLTAG_COUNT);
+			e.extensionFields.scope[0] = SqlKinds [token->scopeKind].name;
+			e.extensionFields.scope[1] = vStringValue (token->scope);
 		}
-		makeConstTag (token, kind);
+
+		makeTagEntry (&e);
 	}
 }
 
@@ -723,7 +708,7 @@ static void readIdentifier (tokenInfo *const token)
  * }
  */
 
-static void addToScope (tokenInfo* const token, vString* const extra)
+static void addToScope (tokenInfo* const token, vString* const extra, sqlKind kind)
 {
 	if (vStringLength (token->scope) > 0)
 	{
@@ -731,6 +716,7 @@ static void addToScope (tokenInfo* const token, vString* const extra)
 	}
 	vStringCatS (token->scope, vStringValue(extra));
 	vStringTerminate(token->scope);
+	token->scopeKind = kind;
 }
 
 /*
@@ -820,6 +806,7 @@ static void copyToken (tokenInfo *const dest, tokenInfo *const src)
 	dest->keyword = src->keyword;
 	vStringCopy(dest->string, src->string);
 	vStringCopy(dest->scope, src->scope);
+	dest->scopeKind = src->scopeKind;
 }
 
 static void skipArgumentList (tokenInfo *const token)
@@ -841,6 +828,7 @@ static void parseSubProgram (tokenInfo *const token)
 {
 	tokenInfo *const name  = newToken ();
 	vString * saveScope = vStringNew ();
+	sqlKind saveScopeKind;
 
 	/*
 	 * This must handle both prototypes and the body of
@@ -898,6 +886,7 @@ static void parseSubProgram (tokenInfo *const token)
 			isKeyword (token, KEYWORD_procedure));
 
 	vStringCopy(saveScope, token->scope);
+	saveScopeKind = token->scopeKind;
 	readToken (token);
 	copyToken (name, token);
 	readToken (token);
@@ -914,7 +903,7 @@ static void parseSubProgram (tokenInfo *const token)
 		 */
 		if ( vStringLength(saveScope) > 0 )
 		{
-			addToScope(token, name->string);
+			addToScope(token, name->string, kind);
 		}
 		readToken (token);
 		copyToken (name, token);
@@ -979,7 +968,7 @@ static void parseSubProgram (tokenInfo *const token)
 				isKeyword (token, KEYWORD_internal) ||
 				isKeyword (token, KEYWORD_external) )
 		{
-			addToScope(token, name->string);
+			addToScope(token, name->string, kind);
 			if (isType (name, TOKEN_IDENTIFIER) ||
 					isType (name, TOKEN_STRING) ||
 					!isKeyword (token, KEYWORD_NONE)
@@ -987,6 +976,7 @@ static void parseSubProgram (tokenInfo *const token)
 				makeSqlTag (name, kind);
 
 			vStringClear (token->scope);
+			token->scopeKind = SQLTAG_COUNT;
 		} 
 		if ( isType (token, TOKEN_EQUAL) )
 			readToken (token);
@@ -997,7 +987,7 @@ static void parseSubProgram (tokenInfo *const token)
 		if (isKeyword (token, KEYWORD_is) || 
 				isKeyword (token, KEYWORD_begin) )
 		{
-			addToScope(token, name->string);
+			addToScope(token, name->string, kind);
 			if (isType (name, TOKEN_IDENTIFIER) ||
 					isType (name, TOKEN_STRING) ||
 					!isKeyword (token, KEYWORD_NONE)
@@ -1006,9 +996,11 @@ static void parseSubProgram (tokenInfo *const token)
 
 			parseBlock (token, TRUE);
 			vStringClear (token->scope);
+			token->scopeKind = SQLTAG_COUNT;
 		} 
 	}
 	vStringCopy(token->scope, saveScope);
+	token->scopeKind = saveScopeKind;
 	deleteToken (name);
 	vStringDelete(saveScope);
 }
@@ -1086,10 +1078,12 @@ static void parseType (tokenInfo *const token)
 {
 	tokenInfo *const name = newToken ();
 	vString * saveScope = vStringNew ();
+	sqlKind saveScopeKind;
 
 	vStringCopy(saveScope, token->scope);
 	/* If a scope has been set, add it to the name */
-	addToScope (name, token->scope);
+	addToScope (name, token->scope, token->scopeKind);
+	saveScopeKind = token->scopeKind;
 	readToken (name);
 	if (isType (name, TOKEN_IDENTIFIER))
 	{
@@ -1097,12 +1091,12 @@ static void parseType (tokenInfo *const token)
 		if (isKeyword (token, KEYWORD_is))
 		{
 			readToken (token);
-			addToScope (token, name->string);
 			switch (token->keyword)
 			{
 				case KEYWORD_record:
 				case KEYWORD_object:
 					makeSqlTag (name, SQLTAG_RECORD);
+					addToScope (token, name->string, SQLTAG_RECORD);
 					parseRecord (token);
 					break;
 
@@ -1119,9 +1113,11 @@ static void parseType (tokenInfo *const token)
 				default: break;
 			}
 			vStringClear (token->scope);
+			token->scopeKind = SQLTAG_COUNT;
 		}
 	}
 	vStringCopy(token->scope, saveScope);
+	token->scopeKind = saveScopeKind;
 	deleteToken (name);
 	vStringDelete(saveScope);
 }
@@ -1659,9 +1655,10 @@ static void parsePackage (tokenInfo *const token)
 		if (isType (name, TOKEN_IDENTIFIER) ||
 				isType (name, TOKEN_STRING))
 			makeSqlTag (name, SQLTAG_PACKAGE);
-		addToScope (token, name->string);
+		addToScope (token, name->string, SQLTAG_PACKAGE);
 		parseBlock (token, FALSE);
 		vStringClear (token->scope);
+		token->scopeKind = SQLTAG_COUNT;
 	}
 	findCmdTerm (token, FALSE);
 	deleteToken (name);
@@ -1724,8 +1721,10 @@ static void parseTable (tokenInfo *const token)
 		{
 			makeSqlTag (name, SQLTAG_TABLE);
 			vStringCopy(token->scope, name->string);
+			token->scopeKind = SQLTAG_TABLE;
 			parseRecord (token);
 			vStringClear (token->scope);
+			token->scopeKind = SQLTAG_COUNT;
 		}
 	} 
 	else if (isKeyword (token, KEYWORD_at))
@@ -1770,7 +1769,7 @@ static void parseIndex (tokenInfo *const token)
 			readIdentifier (owner);
 			readToken (token);
 		}
-		addToScope(name, owner->string);
+		addToScope(name, owner->string, SQLTAG_TABLE /* FIXME? */);
 		makeSqlTag (name, SQLTAG_INDEX);
 	}
 	findCmdTerm (token, FALSE);
@@ -1867,9 +1866,10 @@ static void parseTrigger (tokenInfo *const token)
 		{
 			if ( isKeyword (token, KEYWORD_declare) )
 			{
-				addToScope(token, name->string);
+				addToScope(token, name->string, SQLTAG_TRIGGER);
 				parseDeclare(token, TRUE);
 				vStringClear(token->scope);
+				token->scopeKind = SQLTAG_COUNT;
 			}
 			else
 				readToken (token);
@@ -1878,14 +1878,15 @@ static void parseTrigger (tokenInfo *const token)
 		if ( isKeyword (token, KEYWORD_begin) || 
 				isKeyword (token, KEYWORD_call)   )
 		{
-			addToScope(name, table->string);
+			addToScope(name, table->string, SQLTAG_TABLE);
 			makeSqlTag (name, SQLTAG_TRIGGER);
-			addToScope(token, table->string);
+			addToScope(token, table->string, SQLTAG_TABLE);
 			if ( isKeyword (token, KEYWORD_begin) )
 			{
 				parseBlock (token, TRUE);
 			}
 			vStringClear(token->scope);
+			token->scopeKind = SQLTAG_COUNT;
 		}
 	}
 
@@ -2128,8 +2129,8 @@ static void parseMLTable (tokenInfo *const token)
 						isType (table, TOKEN_STRING) && 
 						isType (event, TOKEN_STRING) )
 				{
-					addToScope(version, table->string);
-					addToScope(version, event->string);
+					addToScope(version, table->string, SQLTAG_TABLE);
+					addToScope(version, event->string, SQLTAG_EVENT);
 					makeSqlTag (version, SQLTAG_MLTABLE);
 				}
 			} 
@@ -2176,7 +2177,7 @@ static void parseMLConn (tokenInfo *const token)
 			if (isType (version, TOKEN_STRING) && 
 					isType (event, TOKEN_STRING) )
 			{
-				addToScope(version, event->string);
+				addToScope(version, event->string, SQLTAG_EVENT);
 				makeSqlTag (version, SQLTAG_MLCONN);
 			}
 		} 
@@ -2238,8 +2239,8 @@ static void parseMLProp (tokenInfo *const token)
 						isType (prop_set_name, TOKEN_STRING) && 
 						isType (prop_name, TOKEN_STRING) )
 				{
-					addToScope(component, prop_set_name->string);
-					addToScope(component, prop_name->string);
+					addToScope(component, prop_set_name->string, SQLTAG_MLPROP /* FIXME */);
+					addToScope(component, prop_name->string, SQLTAG_MLPROP /* FIXME */);
 					makeSqlTag (component, SQLTAG_MLPROP);
 				}
 			} 


Modified: tests/ctags/3184782.sql.tags
8 files changed, 4 insertions(+), 4 deletions(-)
===================================================================
@@ -1,6 +1,6 @@
 # format=tagmanager
+do_this_stuff�256�p_test�0
+myfn1�256�p_test�0
+myfn2�256�p_test�0
 p_test�512�0
-p_test.do_this_stuff�256�0
-p_test.myfn1�256�0
-p_test.myfn2�256�0
-p_test.process_this�256�0
+process_this�256�p_test�0


Modified: tests/ctags/bug1570779.sql.tags
6 files changed, 3 insertions(+), 3 deletions(-)
===================================================================
@@ -1,5 +1,5 @@
 # format=tagmanager
+address�8�employees�0
 employees�1�0
-employees.address�8�0
-employees.id�8�0
-employees.name�8�0
+id�8�employees�0
+name�8�employees�0


Modified: tests/ctags/bug1938565.sql.tags
4 files changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -1,4 +1,4 @@
 # format=tagmanager
 demo_pkg�512�0
-demo_pkg.func1�16�0
-demo_pkg.func2�16�0
+func1�16�demo_pkg�0
+func2�16�demo_pkg�0


Modified: tests/ctags/bug1944150.sql.tags
2 files changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -1,2 +1,2 @@
 # format=tagmanager
-cash_trade_comment.tr_d_cash_trade_comment�65536�0
+tr_d_cash_trade_comment�65536�cash_trade_comment�0


Modified: tests/ctags/bug823000.sql.tags
4 files changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -1,4 +1,4 @@
 # format=tagmanager
 TEST�512�0
-TEST.TestFunc1�256�0
-TEST.TestFunc2�256�0
+TestFunc1�256�TEST�0
+TestFunc2�256�TEST�0


Modified: tests/ctags/db-trig.sql.tags
4 files changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -1,3 +1,3 @@
 # format=tagmanager
-database.restrict_login�65536�0
-database.startup_db�65536�0
+restrict_login�65536�database�0
+startup_db�65536�database�0


Modified: tests/ctags/random.sql.tags
20 files changed, 10 insertions(+), 10 deletions(-)
===================================================================
@@ -1,12 +1,12 @@
 # format=tagmanager
+Seed�16384�random�0
+get_rand�256�random�0
+get_rand_max�256�random�0
+increment�16384�random�0
+multiplier�16384�random�0
+rand�16�random�0
+rand_max�16�random�0
+rand_string�16�random�0
 random�512�0
-random.Seed�16384�0
-random.get_rand�256�0
-random.get_rand_max�256�0
-random.increment�16384�0
-random.multiplier�16384�0
-random.rand�16�0
-random.rand_max�16�0
-random.rand_string�16�0
-random.smaller�16�0
-random.srand�256�0
+smaller�16�random�0
+srand�256�random�0


Modified: tests/ctags/readlob.sql.tags
8 files changed, 4 insertions(+), 4 deletions(-)
===================================================================
@@ -1,10 +1,10 @@
 # format=tagmanager
+b_file�8�lob_table�0
+b_lob�8�lob_table�0
+c_lob�8�lob_table�0
 charbuf�16384�0
 clob_locator�16384�0
+id�8�lob_table�0
 lob_table�1�0
-lob_table.b_file�8�0
-lob_table.b_lob�8�0
-lob_table.c_lob�8�0
-lob_table.id�8�0
 read_amount�16384�0
 read_offset�16384�0


Modified: tests/ctags/readlong.sql.tags
2 files changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -3,7 +3,7 @@ cur1
 long_len�16384�0
 long_piece�16384�0
 long_tab�16384�0
+longcol�8�longtable�0
 longtable�1�0
-longtable.longcol�8�0
 piece_len�16384�0
 rc�16384�0


Modified: tests/ctags/refcurs.sql.tags
6 files changed, 3 insertions(+), 3 deletions(-)
===================================================================
@@ -1,6 +1,6 @@
 # format=tagmanager
+get_cursor_ref�16�test_ref_cursor�0
+main�256�test_ref_cursor�0
+process_cursor�256�test_ref_cursor�0
 test_ref_cursor�512�0
-test_ref_cursor.get_cursor_ref�16�0
-test_ref_cursor.main�256�0
-test_ref_cursor.process_cursor�256�0
 types�512�0



--------------
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