Skip to content

Commit 159bbd1

Browse files
committed
auto-completion: if selecting xs:integer and selecting xs:string from completion-list the updated item would be xs:xs:string - must not dupe the type prefix
1 parent 5bed23c commit 159bbd1

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

src/xsltTokenCompletions.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -569,8 +569,14 @@ export class XsltTokenCompletions {
569569
break;
570570
}
571571
} else if (isOnRequiredToken && tagAttributeNames.length > 0 && tagAttributeNames[tagAttributeNames.length - 1] === 'as') {
572+
let tokenRange: vscode.Range|undefined;
573+
if (token.tokenType === TokenLevelState.simpleType || token.tokenType === TokenLevelState.nodeType) {
574+
const tokenStart = new vscode.Position(token.line, token.startCharacter);
575+
const tokenEnd = new vscode.Position(token.line, token.startCharacter + token.length);
576+
tokenRange = new vscode.Range(tokenStart, tokenEnd);
577+
}
572578
let completionStrings = XsltTokenCompletions.sequenceTypes;
573-
resultCompletions = XsltTokenCompletions.getSimpleInsertCompletions(completionStrings, vscode.CompletionItemKind.TypeParameter);
579+
resultCompletions = XsltTokenCompletions.getRangeInsertCompletions(completionStrings, tokenRange, vscode.CompletionItemKind.TypeParameter);
574580
} else {
575581
let xpathCharType = <CharLevelState>token.charType;
576582
let xpathTokenType = <TokenLevelState>token.tokenType;
@@ -1313,6 +1319,21 @@ export class XsltTokenCompletions {
13131319
return completionItems;
13141320
}
13151321

1322+
private static getRangeInsertCompletions(completionStrings: string[], range: vscode.Range|undefined, kind: vscode.CompletionItemKind, excludeChar?: string) {
1323+
let completionItems: vscode.CompletionItem[] = [];
1324+
completionStrings.forEach((name) => {
1325+
if (!excludeChar || name !== excludeChar) {
1326+
const varName = name;
1327+
const newItem = new vscode.CompletionItem(varName, kind);
1328+
if (range) {
1329+
newItem.range = range;
1330+
}
1331+
completionItems.push(newItem);
1332+
}
1333+
});
1334+
return completionItems;
1335+
}
1336+
13161337
private static getXSLTTagCompletions(document: vscode.TextDocument, docType: DocumentTypes, languageConfig: LanguageConfiguration, schemaQuery: SchemaQuery | undefined, pos: vscode.Position, elementStack: ElementData[], inScopeVariablesList: VariableData[], symbolId: string) {
13171338
if (!schemaQuery) {
13181339
return XsltTokenCompletions.getXSLTSnippetCompletions(languageConfig.elementSnippets);

0 commit comments

Comments
 (0)