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

Reply via email to