Skip to content

Commit 82d5524

Browse files
committed
1. check pfx on fn name 2. auto-complete for xmlns declaration on 'x'
1 parent e43bada commit 82d5524

File tree

5 files changed

+27
-0
lines changed

5 files changed

+27
-0
lines changed

sample/snippet-demo.xsl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
33
xmlns:xs="http://www.w3.org/2001/XMLSchema"
4+
xmlns:pre="abcd"
5+
46
exclude-result-prefixes="#all"
57
expand-text="yes"
68
version="3.0">
@@ -13,6 +15,10 @@
1315

1416
<xsl:variable name="var1" as="xs:integer" select="25 + 8"/>
1517
<xsl:variable name="var2" as="xs:integer" select="$var1 + 9"/>
18+
19+
<xsl:function name="pre:test" as="xs:string">
20+
21+
</xsl:function>
1622

1723
<xsl:template match="book" mode="#all">
1824
<xsl:variable name="var2" as="xs:integer"

src/documentChangeHandler.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,12 @@ export class DocumentChangeHandler {
5757
triggerSuggest = true;
5858
}
5959
}
60+
if (activeChange.rangeOffset > 10) {
61+
let prevChar = e.document.getText().charAt(activeChange.rangeOffset - 1);
62+
if ((prevChar === '\n' || prevChar === ' ') && activeChange.text === 'x') {
63+
triggerSuggest = true;
64+
}
65+
}
6066
if (triggerSuggest || activeChange.text === ' ' || activeChange.text === '(' || activeChange.text === '[' || activeChange.text === '!' || activeChange.text === '$' || activeChange.text === '<') {
6167
setTimeout(() => {
6268
vscode.commands.executeCommand('editor.action.triggerSuggest');

src/xpLexer.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,6 +1070,7 @@ export enum ErrorType {
10701070
XPathName,
10711071
EntityName,
10721072
XPathFunction,
1073+
XSLTFunctionNamePrefix,
10731074
XPathFunctionNamespace,
10741075
XPathOperatorUnexpected,
10751076
XPathPrefix,

src/xsltTokenCompletions.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,9 @@ export class XsltTokenCompletions {
381381
} else {
382382
attType = AttributeType.Xmlns;
383383
}
384+
if (isOnRequiredToken) {
385+
resultCompletions = XsltTokenCompletions.getXSLTSnippetCompletions(XSLTSnippets.xsltXMLNS);
386+
}
384387
break;
385388
case XSLTokenLevelState.attributeValue:
386389
let fullVariableName = XsltTokenDiagnostics.getTextForToken(lineNumber, token, document);

src/xsltTokenDiagnostics.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -698,6 +698,14 @@ export class XsltTokenDiagnostics {
698698
hasProblem = true;
699699
}
700700
}
701+
if (!hasProblem && attType === AttributeType.InstructionName && tagElementName === 'xsl:function') {
702+
if (!variableName.includes(':')) {
703+
token['error'] = ErrorType.XSLTFunctionNamePrefix;
704+
token.value = variableName;
705+
problemTokens.push(token);
706+
hasProblem = true;
707+
}
708+
}
701709
if (!hasProblem && attType === AttributeType.InstructionMode && tagElementName === 'xsl:apply-templates') {
702710
if (globalModes.indexOf(variableName) < 0) {
703711
token['error'] = ErrorType.TemplateModeUnresolved;
@@ -1645,6 +1653,9 @@ export class XsltTokenDiagnostics {
16451653
case ErrorType.TemplateNameUnresolved:
16461654
msg = `XSLT: xsl:template with name '${tokenValue}' not found`;
16471655
break;
1656+
case ErrorType.XSLTFunctionNamePrefix:
1657+
msg = `XSLT: missing namespace prefox in xsl:function name '${tokenValue}'`;
1658+
break;
16481659
case ErrorType.AttributeSetUnresolved:
16491660
msg = `XSLT: xsl:attribute-set with name '${tokenValue}' not found`;
16501661
break;

0 commit comments

Comments
 (0)