fix(vscode): stop duplicating completions inside view blocks
This commit is contained in:
@@ -570,6 +570,41 @@ function isInsideWatch(document, position) {
|
||||
return depth > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether an offset sits inside a `view { }` block.
|
||||
*
|
||||
* The language server owns completion there and returns a merged list, so this
|
||||
* provider stands down to avoid VS Code concatenating two independent lists.
|
||||
* Quotes are only tracked inside a tag: `<p>it's</p>` would otherwise open a
|
||||
* string that never closes.
|
||||
*/
|
||||
function isInsideViewBlock(text, offset) {
|
||||
const pattern = /\bview\s*\{/g;
|
||||
let match;
|
||||
while ((match = pattern.exec(text))) {
|
||||
const start = match.index + match[0].length;
|
||||
let depth = 1;
|
||||
let inTag = false;
|
||||
let quote = null;
|
||||
let index = start;
|
||||
for (; index < text.length && depth > 0; index += 1) {
|
||||
const char = text[index];
|
||||
if (quote) {
|
||||
if (char === quote) quote = null;
|
||||
continue;
|
||||
}
|
||||
if (inTag && (char === '"' || char === "'")) quote = char;
|
||||
else if (char === "<") inTag = true;
|
||||
else if (char === ">") inTag = false;
|
||||
else if (char === "{") depth += 1;
|
||||
else if (char === "}") depth -= 1;
|
||||
}
|
||||
if (offset >= start && offset <= index) return true;
|
||||
pattern.lastIndex = index;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function isAfterWatchKeyword(document, position) {
|
||||
const linePrefix = document.lineAt(position.line).text.slice(0, position.character);
|
||||
|
||||
@@ -634,6 +669,8 @@ function addFunctionCompletions(items, document) {
|
||||
}
|
||||
|
||||
function provideCompletionItems(document, position) {
|
||||
if (isInsideViewBlock(document.getText(), document.offsetAt(position))) return [];
|
||||
|
||||
const items = [];
|
||||
|
||||
const linePrefix = document.lineAt(position.line).text.slice(0, position.character);
|
||||
@@ -707,6 +744,7 @@ module.exports = {
|
||||
extractProps,
|
||||
extractRouteParams,
|
||||
extractStates,
|
||||
isInsideViewBlock,
|
||||
provideCompletionItems,
|
||||
registerCompletionProvider,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user