summaryrefslogtreecommitdiff
path: root/source/slang/slang-language-server-semantic-tokens.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2025-04-30 14:17:45 -0700
committerGitHub <noreply@github.com>2025-04-30 14:17:45 -0700
commit7f1df9d0b31413e59846cc955d2a955d3f361e2a (patch)
tree8cfcb7b6dde96f90e9581f9a904a25158a7358cb /source/slang/slang-language-server-semantic-tokens.cpp
parent678de6547bc8cac15e31de30b400e9a3b45c216f (diff)
Initial support for immutable lambda expressions. (#6914)
* Initial support for immutable lambda expressions. * More diagnostics, and langauge server fix. * Language server fix. * Fix bug identified in review. * Add expected result. * Update expected result.
Diffstat (limited to 'source/slang/slang-language-server-semantic-tokens.cpp')
-rw-r--r--source/slang/slang-language-server-semantic-tokens.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/source/slang/slang-language-server-semantic-tokens.cpp b/source/slang/slang-language-server-semantic-tokens.cpp
index 5d0e41ecb..54528d7fc 100644
--- a/source/slang/slang-language-server-semantic-tokens.cpp
+++ b/source/slang/slang-language-server-semantic-tokens.cpp
@@ -39,6 +39,20 @@ SemanticToken _createSemanticToken(SourceManager* manager, SourceLoc loc, Name*
return token;
}
+// We don't want to semantic highlight a synthetic name, like $init, () etc,
+// because they aren't actually appearing in the source code.
+bool isHighlightableName(Name* name)
+{
+ if (!name)
+ return false;
+ for (auto ch : name->text)
+ {
+ if (!CharUtil::isAlphaOrDigit(ch) && ch != '_')
+ return false;
+ }
+ return true;
+}
+
List<SemanticToken> getSemanticTokens(
Linkage* linkage,
Module* module,
@@ -67,7 +81,7 @@ List<SemanticToken> getSemanticTokens(
return;
if (!name)
name = declRef.getDecl()->getName();
- if (!name)
+ if (!isHighlightableName(name))
return;
// Don't look at the expr if it is defined in a different file.
if (!manager->getHumaneLoc(loc, SourceLocType::Actual)
@@ -221,7 +235,7 @@ List<SemanticToken> getSemanticTokens(
}
else if (auto funcDecl = as<FuncDecl>(node))
{
- if (funcDecl->getName())
+ if (isHighlightableName(funcDecl->getName()))
{
SemanticToken token =
_createSemanticToken(manager, funcDecl->getNameLoc(), funcDecl->getName());