From 10aba15154dc5e663318d6ff410f23a3f7502a1e Mon Sep 17 00:00:00 2001 From: ivanwonder Date: Wed, 8 Jul 2020 16:29:55 +0800 Subject: [PATCH] fix(language-service): remove completion for string (#37983) If the user inputs a string(e.g. `
`), the completion is useless. PR Close #37983 --- packages/language-service/src/expressions.ts | 11 ++++++++++- packages/language-service/test/completions_spec.ts | 7 +++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/language-service/src/expressions.ts b/packages/language-service/src/expressions.ts index 7eff222f58..f6cebc40d4 100644 --- a/packages/language-service/src/expressions.ts +++ b/packages/language-service/src/expressions.ts @@ -75,7 +75,16 @@ export function getExpressionCompletions( visitKeyedWrite(_ast) {}, visitLiteralArray(_ast) {}, visitLiteralMap(_ast) {}, - visitLiteralPrimitive(_ast) {}, + visitLiteralPrimitive(ast) { + // The type `LiteralPrimitive` include the `ERROR`, and it's wrapped as `string`. + // packages/compiler/src/template_parser/binding_parser.ts#L308 + // So exclude the `ERROR` here. + if (typeof ast.value === 'string' && + ast.value === + templateInfo.source.slice(ast.sourceSpan.start + 1, ast.sourceSpan.end - 1)) { + result = undefined; + } + }, visitMethodCall(_ast) {}, visitPipe(ast) { if (position >= ast.exp.span.end && diff --git a/packages/language-service/test/completions_spec.ts b/packages/language-service/test/completions_spec.ts index b5a818b656..d39324426f 100644 --- a/packages/language-service/test/completions_spec.ts +++ b/packages/language-service/test/completions_spec.ts @@ -848,6 +848,13 @@ describe('completions', () => { const completions = ngLS.getCompletionsAtPosition(TEST_TEMPLATE, marker.start); expect(completions).toBeUndefined(); }); + + it('should not provide completions for string', () => { + mockHost.override(TEST_TEMPLATE, `
`); + const marker = mockHost.getLocationMarkerFor(TEST_TEMPLATE, 'cursor'); + const completions = ngLS.getCompletionsAtPosition(TEST_TEMPLATE, marker.start); + expect(completions).toBeUndefined(); + }); }); function expectContain(