From 77ee4818557313e89a4edf5ab51404a678e44e3c Mon Sep 17 00:00:00 2001 From: MikhailArkhipov Date: Tue, 11 Jun 2019 10:16:58 -0700 Subject: [PATCH] Suppress completion in non-user code --- src/LanguageServer/Impl/Completion/CompletionSource.cs | 6 +++++- .../Impl/Completion/ErrorExpressionCompletion.cs | 4 ++++ src/LanguageServer/Impl/Completion/ExpressionLocator.cs | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/LanguageServer/Impl/Completion/CompletionSource.cs b/src/LanguageServer/Impl/Completion/CompletionSource.cs index a3a9a846c..7f635c5c3 100644 --- a/src/LanguageServer/Impl/Completion/CompletionSource.cs +++ b/src/LanguageServer/Impl/Completion/CompletionSource.cs @@ -16,7 +16,7 @@ using System.Linq; using Microsoft.Python.Analysis; using Microsoft.Python.Analysis.Analyzer.Expressions; -using Microsoft.Python.Core; +using Microsoft.Python.Analysis.Modules; using Microsoft.Python.Core.Text; using Microsoft.Python.Parsing; using Microsoft.Python.Parsing.Ast; @@ -30,6 +30,10 @@ public CompletionSource(IDocumentationSource docSource, ServerSettings.PythonCom } public CompletionResult GetCompletions(IDocumentAnalysis analysis, SourceLocation location) { + if(analysis.Document.ModuleType != ModuleType.User) { + return CompletionResult.Empty; + } + var context = new CompletionContext(analysis, location, _itemSource); ExpressionLocator.FindExpression(analysis.Ast, location, diff --git a/src/LanguageServer/Impl/Completion/ErrorExpressionCompletion.cs b/src/LanguageServer/Impl/Completion/ErrorExpressionCompletion.cs index 3430c64c6..74c5b8d05 100644 --- a/src/LanguageServer/Impl/Completion/ErrorExpressionCompletion.cs +++ b/src/LanguageServer/Impl/Completion/ErrorExpressionCompletion.cs @@ -43,6 +43,10 @@ public static CompletionResult GetCompletions(ScopeStatement scope, Node stateme Expression e; var lastToken = tokens.FirstOrDefault(); + if(lastToken.Value == null) { + return CompletionResult.Empty; + } + var nextLast = tokens.ElementAtOrDefault(1).Value?.Kind ?? TokenKind.EndOfFile; switch (lastToken.Value.Kind) { case TokenKind.Dot: diff --git a/src/LanguageServer/Impl/Completion/ExpressionLocator.cs b/src/LanguageServer/Impl/Completion/ExpressionLocator.cs index f0835cb87..6c2573fd5 100644 --- a/src/LanguageServer/Impl/Completion/ExpressionLocator.cs +++ b/src/LanguageServer/Impl/Completion/ExpressionLocator.cs @@ -42,6 +42,7 @@ public static void FindExpression(PythonAst ast, SourceLocation position, FindEx } expression = expression ?? (statement as ExpressionStatement)?.Expression; + scope = scope ?? ast; } private static bool CanBackUp(PythonAst ast, Node node, Node statement, ScopeStatement scope, int column) {