From 06bd8a5ddc816b21c4b6a500cceaf8d792ed4b3f Mon Sep 17 00:00:00 2001 From: Josh Tynjala Date: Thu, 26 Oct 2023 16:05:25 -0700 Subject: [PATCH] language-server: definition name completion is not skipped for overridden functions and accessors (references #654) follow up to commit 9c6a730ef674845b079d65c89ed4e5c989f1b927 --- .../vscode/providers/CompletionProvider.java | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/language-server/src/main/java/com/as3mxml/vscode/providers/CompletionProvider.java b/language-server/src/main/java/com/as3mxml/vscode/providers/CompletionProvider.java index 3bac683f8..585d736e1 100644 --- a/language-server/src/main/java/com/as3mxml/vscode/providers/CompletionProvider.java +++ b/language-server/src/main/java/com/as3mxml/vscode/providers/CompletionProvider.java @@ -352,24 +352,33 @@ private CompletionList actionScriptCompletion(IASNode offsetNode, Path path, Pos } currentNodeForScope = currentNodeForScope.getParent(); } while (currentNodeForScope != null); - - return result; + // don't return because the function might be an override + // and the name can be completed } if (ASTNodeID.KeywordVarID.equals(keywordNode.getNodeID()) || ASTNodeID.KeywordConstID.equals(keywordNode.getNodeID()) || ASTNodeID.KeywordClassID.equals(keywordNode.getNodeID()) - || ASTNodeID.KeywordInterfaceID.equals(keywordNode.getNodeID()) - || ASTNodeID.KeywordGetID.equals(keywordNode.getNodeID()) - || ASTNodeID.KeywordSetID.equals(keywordNode.getNodeID())) { + || ASTNodeID.KeywordInterfaceID.equals(keywordNode.getNodeID())) { return result; } } - if (parentNode != null && parentNode instanceof IDefinitionNode && !(parentNode instanceof IPackageNode)) { + if (parentNode != null && parentNode instanceof IDefinitionNode) { IDefinitionNode defNode = (IDefinitionNode) parentNode; if (offsetNode == defNode.getNameExpressionNode()) { - // no completion for definition names because names shouldn't - // conflict with each other - return result; + boolean skipCompletion = true; + if (defNode instanceof IPackageNode) { + skipCompletion = false; + } else if (defNode instanceof IFunctionNode) { + IFunctionNode funcNode = (IFunctionNode) defNode; + if (funcNode.hasModifier(ASModifier.OVERRIDE)) { + skipCompletion = false; + } + } + if (skipCompletion) { + // no completion for certain definition names where names + // shouldn't conflict with each other + return result; + } } }