This is an automated email from the ASF dual-hosted git repository.
slawrence pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/daffodil-vscode.git
The following commit(s) were added to refs/heads/main by this push:
new 2a42b71 xs:choice component modified to allow attributes, added tag
close for xs:choice, fixed snippet return for choiceDispatchKey, fixed brace
autocomplete for choice dispatchkey
2a42b71 is described below
commit 2a42b71b8294af12d98e9d6f5f2bd473c7f61169
Author: rt320 <[email protected]>
AuthorDate: Wed Sep 7 13:05:33 2022 -0400
xs:choice component modified to allow attributes, added tag close for
xs:choice, fixed snippet return for choiceDispatchKey, fixed brace autocomplete
for choice dispatchkey
---
src/language/providers/closeElement.ts | 7 +++++
src/language/providers/endSingleBrace.ts | 5 +++-
.../providers/intellisense/attributeItems.ts | 2 +-
.../providers/intellisense/elementItems.ts | 2 +-
src/language/providers/utils.ts | 32 ++++++++++++++++++++++
5 files changed, 45 insertions(+), 3 deletions(-)
diff --git a/src/language/providers/closeElement.ts
b/src/language/providers/closeElement.ts
index 3c8017f..7d271c4 100644
--- a/src/language/providers/closeElement.ts
+++ b/src/language/providers/closeElement.ts
@@ -42,6 +42,8 @@ export function getCloseElementProvider() {
nearestOpenItem.includes('sequence') ||
wholeLine.includes('xs:simpleType') ||
nearestOpenItem.includes('simpleType') ||
+ wholeLine.includes('xs:choice') ||
+ nearestOpenItem.includes('choice') ||
wholeLine.includes('dfdl:defineVariable') ||
nearestOpenItem.includes('Variable'))
) {
@@ -72,6 +74,11 @@ export function getCloseElementProvider() {
nearestOpenItem.includes('sequence')
) {
insertSnippet('>\n\t$0\n</xs:sequence>', backpos)
+ } else if (
+ (wholeLine.endsWith('>') && wholeLine.includes('xs:choice')) ||
+ nearestOpenItem.includes('choice')
+ ) {
+ insertSnippet('>\n\t$0\n</xs:choice>', backpos)
} else if (
(wholeLine.endsWith('>') && wholeLine.includes('xs:simpleType')) ||
nearestOpenItem.includes('simpleType')
diff --git a/src/language/providers/endSingleBrace.ts
b/src/language/providers/endSingleBrace.ts
index c9381ef..8be8e60 100644
--- a/src/language/providers/endSingleBrace.ts
+++ b/src/language/providers/endSingleBrace.ts
@@ -29,7 +29,10 @@ export function getEndSingleBraceProvider() {
const wholeLine = document
.lineAt(position)
.text.substr(0, position.character)
- if (wholeLine.includes('dfdl:length="{')) {
+ if (
+ wholeLine.includes('dfdl:length="{') ||
+ wholeLine.includes('dfdl:choiceDispatchKey="{')
+ ) {
insertSnippet('$1}$0', position)
}
return undefined
diff --git a/src/language/providers/intellisense/attributeItems.ts
b/src/language/providers/intellisense/attributeItems.ts
index f08a175..82a4209 100644
--- a/src/language/providers/intellisense/attributeItems.ts
+++ b/src/language/providers/intellisense/attributeItems.ts
@@ -160,7 +160,7 @@ export const attributeCompletion = (additionalItems) => {
},
{
item: 'dfdl:choiceDispatchKey=',
- snippetString: 'dfdl:choiceBranchKey="$1"$0',
+ snippetString: 'dfdl:choiceDispatchKey="$1"$0',
markdownString: 'The expression must evaluate to a string',
},
{
diff --git a/src/language/providers/intellisense/elementItems.ts
b/src/language/providers/intellisense/elementItems.ts
index 4882bba..7d51715 100644
--- a/src/language/providers/intellisense/elementItems.ts
+++ b/src/language/providers/intellisense/elementItems.ts
@@ -98,7 +98,7 @@ export const elementCompletion = (definedVariables,
dfdlFormatString) => {
},
{
item: 'xs:choice',
- snippetString: '<xs:choice$1>\n\t$0\n</xs:choice>',
+ snippetString: '<xs:choice',
},
{
item: 'dfdl:defineVariable',
diff --git a/src/language/providers/utils.ts b/src/language/providers/utils.ts
index eda5c1b..6674f17 100644
--- a/src/language/providers/utils.ts
+++ b/src/language/providers/utils.ts
@@ -45,6 +45,7 @@ export function checkLastItemOpen(
previousLine.includes('/>') ||
((wholeLine.includes('element') ||
wholeLine.includes('sequence') ||
+ wholeLine.includes('choice') ||
wholeLine.includes('group') ||
wholeLine.includes('Variable')) &&
(wholeLine.includes('</') || wholeLine.includes('/>')))
@@ -94,6 +95,10 @@ export function nearestOpen(
if (checkSequenceOpen(document, position)) {
return 'sequence'
}
+ } else if (wholeLine.includes('choice') && !wholeLine.includes('/>')) {
+ if (checkChoiceOpen(document, position)) {
+ return 'choice'
+ }
} else if (wholeLine.includes('group')) {
if (
wholeLine.includes('<xs:group') &&
@@ -187,6 +192,33 @@ export function checkSequenceOpen(
return false
}
+export function checkChoiceOpen(
+ document: vscode.TextDocument,
+ position: vscode.Position
+) {
+ var lineNum = position.line
+ while (lineNum !== 0) {
+ const wholeLine = document
+ .lineAt(lineNum)
+ .text.substr(0, document.lineAt(lineNum).range.end.character)
+ if (
+ (wholeLine.includes('<xs:choice') &&
+ (wholeLine.includes('</xs:choice') || wholeLine.includes('/>'))) ||
+ wholeLine.includes('</xs:choice>')
+ ) {
+ return false
+ }
+ if (
+ wholeLine.includes('<xs:choice') &&
+ !wholeLine.includes('</xs:choice') &&
+ !wholeLine.includes('/>')
+ ) {
+ return true
+ }
+ --lineNum
+ }
+ return false
+}
export function checkSimpleTypeOpen(
document: vscode.TextDocument,
position: vscode.Position