From 7f1df9d0b31413e59846cc955d2a955d3f361e2a Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 30 Apr 2025 14:17:45 -0700 Subject: 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. --- source/slang/slang-language-server-semantic-tokens.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'source/slang/slang-language-server-semantic-tokens.cpp') 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 getSemanticTokens( Linkage* linkage, Module* module, @@ -67,7 +81,7 @@ List 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 getSemanticTokens( } else if (auto funcDecl = as(node)) { - if (funcDecl->getName()) + if (isHighlightableName(funcDecl->getName())) { SemanticToken token = _createSemanticToken(manager, funcDecl->getNameLoc(), funcDecl->getName()); -- cgit v1.2.3