From 07a380d72a13899a84cbdc35692be7a3d9246dcb Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 22 Jun 2022 19:58:34 -0700 Subject: More Language Server Improvements. (#2289) --- source/slang/slang-language-server-ast-lookup.cpp | 35 +++++++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) (limited to 'source/slang/slang-language-server-ast-lookup.cpp') diff --git a/source/slang/slang-language-server-ast-lookup.cpp b/source/slang/slang-language-server-ast-lookup.cpp index 0e5a68687..6792a18e7 100644 --- a/source/slang/slang-language-server-ast-lookup.cpp +++ b/source/slang/slang-language-server-ast-lookup.cpp @@ -78,11 +78,13 @@ bool _isLocInRange(ASTLookupContext* context, SourceLoc start, SourceLoc end) { auto startLoc = context->sourceManager->getHumaneLoc(start, SourceLocType::Actual); auto endLoc = context->sourceManager->getHumaneLoc(end, SourceLocType::Actual); - + Loc s{startLoc.line, startLoc.column}; Loc e{endLoc.line, endLoc.column}; Loc c{context->line, context->col}; - return s <= c && c <= e; + return s <= c && c <= e && + startLoc.pathInfo.foundPath.getUnownedSlice().endsWithCaseInsensitive( + context->sourceFileName); } bool _findAstNodeImpl(ASTLookupContext& context, SyntaxNode* node); @@ -149,6 +151,8 @@ public: PushNode pushNodeRAII(context, expr); if (dispatchIfNotNull(expr->functionExpr)) return true; + if (dispatchIfNotNull(expr->originalFunctionExpr)) + return true; for (auto arg : expr->arguments) if (dispatchIfNotNull(arg)) return true; @@ -317,7 +321,7 @@ public: context->results.add(result); return true; } - return false; + return dispatchIfNotNull(expr->originalExpr); } bool visitStaticMemberExpr(StaticMemberExpr* expr) @@ -548,6 +552,16 @@ bool _findAstNodeImpl(ASTLookupContext& context, SyntaxNode* node) if (visitor.dispatchIfNotNull(extDecl->targetType.exp)) return true; } + else if (auto importDecl = as(node)) + { + if (_isLocInRange(&context, importDecl->startLoc, importDecl->endLoc)) + { + ASTLookupResult result; + result.path = context.nodePath; + context.results.add(_Move(result)); + return true; + } + } for (auto modifier : decl->modifiers) { if (auto hlslSemantic = as(modifier)) @@ -562,6 +576,21 @@ bool _findAstNodeImpl(ASTLookupContext& context, SyntaxNode* node) return true; } } + else if (auto attribute = as(modifier)) + { + if (attribute->getKeywordName() && + _isLocInRange( + &context, + attribute->getKeywordNameAndLoc().loc, + attribute->getKeywordName()->text.getLength())) + { + ASTLookupResult result; + result.path = context.nodePath; + result.path.add(attribute); + context.results.add(result); + return true; + } + } } if (auto container = as(node)) { -- cgit v1.2.3