scholarsmate commented on code in PR #429:
URL: https://github.com/apache/daffodil-vscode/pull/429#discussion_r1084047215


##########
src/language/providers/closeElement.ts:
##########
@@ -27,98 +32,207 @@ export function getCloseElementProvider() {
         position: vscode.Position
       ) {
         var backpos = position.with(position.line, position.character - 1)
+        var backpos3 = position.with(position.line, position.character - 3)
         const nsPrefix = getXsdNsPrefix(document, position)
         const nearestOpenItem = nearestOpen(document, position)
         const triggerText = document
           .lineAt(position)
           .text.substring(0, position.character)
+        var itemsOnLine = getItemsOnLineCount(triggerText)
 
         if (
-          !triggerText.includes('</') &&
           triggerText.endsWith('>') &&
-          (triggerText.includes('<' + nsPrefix + 'element') ||
-            nearestOpenItem.includes('element') ||
-            triggerText.includes('<' + nsPrefix + 'group') ||
-            nearestOpenItem.includes('group') ||
-            triggerText.includes('<' + nsPrefix + 'sequence') ||
-            nearestOpenItem.includes('sequence') ||
-            triggerText.includes('<' + nsPrefix + 'simpleType') ||
-            nearestOpenItem.includes('simpleType') ||
-            triggerText.includes('<' + nsPrefix + 'choice') ||
-            nearestOpenItem.includes('choice') ||
-            triggerText.includes('dfdl:defineVariable') ||
-            nearestOpenItem.includes('Variable'))
+          ((triggerText.includes('<' + nsPrefix + 'element') &&
+            nearestOpenItem.includes('element')) ||
+            (triggerText.includes('<' + nsPrefix + 'group') &&
+              nearestOpenItem.includes('group')) ||
+            (triggerText.includes('<' + nsPrefix + 'sequence') &&
+              nearestOpenItem.includes('sequence')) ||
+            (triggerText.includes('<' + nsPrefix + 'simpleType') &&
+              nearestOpenItem.includes('simpleType')) ||
+            (triggerText.includes('<' + nsPrefix + 'choice') &&
+              nearestOpenItem.includes('choice')) ||
+            (triggerText.includes('dfdl:defineVariable') &&
+              nearestOpenItem.includes('Variable')) ||
+            itemsOnLine == 0)
         ) {
           var range = new vscode.Range(backpos, position)
           vscode.window.activeTextEditor?.edit((editBuilder) => {
             editBuilder.replace(range, '')
           })
-          if (
-            triggerText.endsWith('>') &&
-            (triggerText.includes('<' + nsPrefix + 'element ref') ||
-              triggerText.includes('<' + nsPrefix + 'group ref'))
-          ) {
-            insertSnippet(' />\n$0', backpos)
-          } else if (
-            triggerText.endsWith('>') &&
-            (triggerText.includes('<' + nsPrefix + 'element') ||
-              nearestOpenItem.includes('element'))
-          ) {
-            insertSnippet('>\n\t$0\n</' + nsPrefix + 'element>', backpos)
-          } else if (
-            triggerText.endsWith('>') &&
-            (triggerText.includes('<' + nsPrefix + 'group') ||
-              nearestOpenItem.includes('group'))
-          ) {
-            insertSnippet('>\n\t$0\n</' + nsPrefix + 'group>', backpos)
-          } else if (
-            (triggerText.endsWith('>') &&
-              triggerText.includes('<' + nsPrefix + 'sequence')) ||
-            nearestOpenItem.includes('sequence')
-          ) {
-            insertSnippet('>\n\t$0\n</' + nsPrefix + 'sequence>', backpos)
-          } else if (
-            (triggerText.endsWith('>') &&
-              triggerText.includes('<' + nsPrefix + 'choice')) ||
-            nearestOpenItem.includes('choice')
-          ) {
-            insertSnippet('>\n\t$0\n</' + nsPrefix + 'choice>', backpos)
-          } else if (
-            (triggerText.endsWith('>') &&
-              triggerText.includes('<' + nsPrefix + 'simpleType')) ||
-            nearestOpenItem.includes('simpleType')
-          ) {
-            insertSnippet('>\n\t$0\n</' + nsPrefix + 'simpleType>', backpos)
-          } else if (
-            (triggerText.endsWith('>') &&
-              triggerText.includes('dfdl:defineVariable')) ||
-            nearestOpenItem.includes('defineVariable')
-          ) {
-            var startPos = document.lineAt(position).text.indexOf('<', 0)
-            var range = new vscode.Range(backpos, position)
-            vscode.window.activeTextEditor?.edit((editBuilder) => {
-              editBuilder.replace(range, '')
-            })
-            insertSnippet('>\n</dfdl:defineVariable>\n', backpos)
-            var backpos2 = position.with(position.line + 2, startPos - 2)
-            insertSnippet('</<' + nsPrefix + 'appinfo>\n', backpos2)
-            var backpos3 = position.with(position.line + 3, startPos - 4)
-            insertSnippet('</<' + nsPrefix + 'annotation>$0', backpos3)
-          } else if (
-            (triggerText.endsWith('>') &&
-              triggerText.includes('dfdl:setVariable')) ||
-            nearestOpenItem.includes('setVariable')
-          ) {
-            var startPos = document.lineAt(position).text.indexOf('<', 0)
-            var range = new vscode.Range(backpos, position)
-            vscode.window.activeTextEditor?.edit((editBuilder) => {
-              editBuilder.replace(range, '')
-            })
-            insertSnippet('>\n</dfdl:setVariable>\n', backpos)
-            var backpos2 = position.with(position.line + 2, startPos - 2)
-            insertSnippet('</' + nsPrefix + 'appinfo>\n', backpos2)
-            var backpos3 = position.with(position.line + 3, startPos - 4)
-            insertSnippet('</' + nsPrefix + 'annotation>$0', backpos3)
+          if (itemsOnLine == 1 || itemsOnLine == 0) {
+            if (!triggerText.includes('</')) {
+              if (itemsOnLine == 0) {
+                insertSnippet(
+                  '</' + nsPrefix + nearestOpenItem + '>$0',
+                  backpos3
+                )
+              } else {
+                if (
+                  triggerText.endsWith('>') &&
+                  (triggerText.includes('<' + nsPrefix + 'element ref') ||
+                    triggerText.includes('<' + nsPrefix + 'group ref'))
+                ) {
+                  insertSnippet(' />\n$0', backpos)
+                } else if (
+                  triggerText.endsWith('>') &&
+                  triggerText.includes('<' + nsPrefix + 'element') &&
+                  nearestOpenItem.includes('element')
+                ) {
+                  insertSnippet('>\n\t$0\n</' + nsPrefix + 'element>', backpos)
+                } else if (
+                  triggerText.endsWith('>') &&
+                  triggerText.includes('<' + nsPrefix + 'group') &&
+                  nearestOpenItem.includes('group')
+                ) {
+                  insertSnippet('>\n\t$0\n</' + nsPrefix + 'group>', backpos)
+                } else if (
+                  triggerText.endsWith('>') &&
+                  triggerText.includes('<' + nsPrefix + 'sequence') &&
+                  nearestOpenItem.includes('sequence')
+                ) {
+                  insertSnippet('>\n\t$0\n</' + nsPrefix + 'sequence>', 
backpos)
+                } else if (
+                  triggerText.endsWith('>') &&
+                  triggerText.includes('<' + nsPrefix + 'choice') &&
+                  nearestOpenItem.includes('choice')
+                ) {
+                  insertSnippet('>\n\t$0\n</' + nsPrefix + 'choice>', backpos)
+                } else if (
+                  triggerText.endsWith('>') &&
+                  triggerText.includes('<' + nsPrefix + 'simpleType') &&
+                  nearestOpenItem.includes('simpleType')
+                ) {
+                  insertSnippet(
+                    '>\n\t$0\n</' + nsPrefix + 'simpleType>',
+                    backpos
+                  )
+                } else if (
+                  triggerText.endsWith('>') &&
+                  triggerText.includes('dfdl:defineVariable') &&
+                  nearestOpenItem.includes('defineVariable')
+                ) {
+                  var startPos = document.lineAt(position).text.indexOf('<', 0)

Review Comment:
   Many / All of the `var` in here should be `const`.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to