From c1a0d82acbe6fa026a1f6843fee00cc1df626549 Mon Sep 17 00:00:00 2001 From: amitkummer <49096391+amitkummer@users.noreply.github.com> Date: Sat, 27 Feb 2021 18:32:41 +0200 Subject: Fixes for C and C++ functions and namespaces (#1722) * Fix lexing of function names This fixes #1561. Add a keywords state that matches inside and outside functions for keywords. Before this, when a keyword would appear the lexer would go to the statements state, in which functions were not matched. * Add tests for lexing of function names * Unbreak previous tests * Allow namespaced names in function statements Add a second identifiers regex that matces all the previous identifiers and also '::'. I took the decision to create a second identifiers regex with '::' inside, simply because using the old identifiers regex would hurt performance massively on every solution I tried to craft. * Add tests for namespaced names in functions * Unbreak previous tests * Add support for namespaces in namespace declarations Add a namespace state that is entered each time the namespace keyword is matched and lexes all name matches as namespaces. Cases this approach doesn't cover: * Namespaces in using declarations. * Namespaces that prefix names in random code. Unfortunately, in both of these cases the names before and after '::' are not always namespaces. * Add tests for namespace declartions * Unbreak previous tests * Tidy functions regex Remove group nesting that became unneeded after fc56ab8 (the last big refactor). * Remove f string usage I introduced by mistake --- tests/examplefiles/cpp/example.cpp.output | 54 ++++++++++++++----------------- 1 file changed, 24 insertions(+), 30 deletions(-) (limited to 'tests/examplefiles/cpp/example.cpp.output') diff --git a/tests/examplefiles/cpp/example.cpp.output b/tests/examplefiles/cpp/example.cpp.output index 2d6615f3..aea47bec 100644 --- a/tests/examplefiles/cpp/example.cpp.output +++ b/tests/examplefiles/cpp/example.cpp.output @@ -20,7 +20,7 @@ ' ' Text 'namespace' Keyword ' ' Text -'std' Name +'std' Name.Namespace ';' Punctuation '\n' Text @@ -28,7 +28,7 @@ 'namespace' Keyword ' ' Text -'highlight' Name +'highlight' Name.Namespace ' ' Text '{' Punctuation '\n' Text @@ -39,10 +39,7 @@ 'string' Name ' ' Text -'AnsiGenerator' Name -':' Operator -':' Operator -'getOpenTag' Name +'AnsiGenerator::getOpenTag' Name.Function '(' Punctuation 'const' Keyword ' ' Text @@ -519,7 +516,7 @@ ' ' Text 'return' Keyword ' ' Text -'string' Name.Function +'string' Name '(' Punctuation ')' Punctuation ';' Punctuation @@ -569,7 +566,7 @@ ' ' Text 'return' Keyword ' ' Text -'string' Name.Function +'string' Name '(' Punctuation ')' Punctuation ';' Punctuation @@ -786,7 +783,7 @@ 'namespace' Keyword ' ' Text -'highlight' Name +'highlight' Name.Namespace ' ' Text '{' Punctuation '\n' Text @@ -1096,7 +1093,7 @@ ' ' Text 'namespace' Keyword ' ' Text -'std' Name +'std' Name.Namespace ';' Punctuation '\n' Text @@ -1118,7 +1115,7 @@ 'namespace' Keyword ' ' Text -'astyle' Name +'astyle' Name.Namespace '\n' Text ' ' Text @@ -1236,10 +1233,7 @@ ' ' Text 'void' Keyword.Type ' ' Text -'ASBeautifier' Name -':' Operator -':' Operator -'initStatic' Name +'ASBeautifier::initStatic' Name.Function '(' Punctuation ')' Punctuation '\n' Text @@ -4875,7 +4869,7 @@ ' ' Text 'return' Keyword ' ' Text -'beautify' Name.Function +'beautify' Name '(' Punctuation 'sourceIterator' Name '-' Operator @@ -7038,7 +7032,7 @@ ' ' Text 'else' Keyword ' ' Text -'if' Name.Function +'if' Keyword ' ' Text '(' Punctuation '!' Operator @@ -8678,7 +8672,7 @@ '\n' Text ' ' Text -'registerInStatementIndent' Name.Function +'registerInStatementIndent' Name '(' Punctuation 'line' Name ',' Punctuation @@ -13779,7 +13773,7 @@ ' ' Text 'else' Keyword ' ' Text -'if' Name.Function +'if' Keyword ' ' Text '(' Punctuation '!' Operator @@ -13838,7 +13832,7 @@ ' ' Text 'else' Keyword ' ' Text -'if' Name.Function +'if' Keyword ' ' Text '(' Punctuation '!' Operator @@ -15080,7 +15074,7 @@ ' ' Text 'else' Keyword ' ' Text -'if' Name.Function +'if' Keyword ' ' Text '(' Punctuation 'ch' Name @@ -16225,7 +16219,7 @@ ' ' Text 'namespace' Keyword ' ' Text -'std' Name +'std' Name.Namespace ';' Punctuation '\n' Text @@ -16233,7 +16227,7 @@ 'namespace' Keyword ' ' Text -'astyle' Name +'astyle' Name.Namespace '\n' Text ' ' Text @@ -16363,7 +16357,7 @@ ' ' Text 'void' Keyword.Type ' ' Text -'init' Name +'init' Name.Function '(' Punctuation 'ASSourceIterator' Name '*' Operator @@ -16379,7 +16373,7 @@ ' ' Text 'void' Keyword.Type ' ' Text -'init' Name +'init' Name.Function '(' Punctuation ')' Punctuation ';' Punctuation @@ -16390,7 +16384,7 @@ ' ' Text 'bool' Keyword.Type ' ' Text -'hasMoreLines' Name +'hasMoreLines' Name.Function '(' Punctuation ')' Punctuation ' ' Text @@ -16403,7 +16397,7 @@ ' ' Text 'string' Name ' ' Text -'nextLine' Name +'nextLine' Name.Function '(' Punctuation ')' Punctuation ';' Punctuation @@ -16414,7 +16408,7 @@ ' ' Text 'string' Name ' ' Text -'beautify' Name +'beautify' Name.Function '(' Punctuation 'const' Keyword ' ' Text @@ -16680,7 +16674,7 @@ 'string' Name ' ' Text '*' Operator -'findHeader' Name +'findHeader' Name.Function '(' Punctuation 'const' Keyword ' ' Text @@ -17566,6 +17560,6 @@ ' ' Text 'namespace' Keyword ' ' Text -'std' Name +'std' Name.Namespace ';' Punctuation '\n' Text -- cgit v1.2.1