From a7ba55f2b781544cd74927137025f2c00a398f69 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 31 Oct 2021 01:53:11 +0200 Subject: fix(web): fix server-side content assist filtering --- language-web/src/main/js/xtext/ContentAssistService.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'language-web/src') diff --git a/language-web/src/main/js/xtext/ContentAssistService.ts b/language-web/src/main/js/xtext/ContentAssistService.ts index ec6b80d2..8461ec7f 100644 --- a/language-web/src/main/js/xtext/ContentAssistService.ts +++ b/language-web/src/main/js/xtext/ContentAssistService.ts @@ -14,20 +14,28 @@ const PROPOSALS_LIMIT = 1000; const IDENTIFIER_REGEXP_STR = '[a-zA-Z0-9_]*'; +const HIGH_PRIORITY_KEYWORDS = ['<->']; + +const QUALIFIED_NAME_SEPARATOR_REGEXP = /::/g; + const log = getLogger('xtext.ContentAssistService'); function createCompletion(entry: IContentAssistEntry): Completion { let boost; switch (entry.kind) { case 'KEYWORD': - boost = -99; + // Some hard-to-type operators should be on top. + boost = HIGH_PRIORITY_KEYWORDS.includes(entry.proposal) ? 10 : -99; break; case 'TEXT': case 'SNIPPET': boost = -90; break; - default: - boost = 0; + default: { + // Penalize qualified names (vs available unqualified names). + const extraSegments = entry.proposal.match(QUALIFIED_NAME_SEPARATOR_REGEXP)?.length || 0; + boost = Math.max(-5 * extraSegments, -50); + } break; } return { -- cgit v1.2.3-54-g00ecf