From d83b499659c0cf5f8bae3beafb6cceefa9302067 Mon Sep 17 00:00:00 2001
From: Mark Pearce <mark.pearce@redspace.com>
Date: Fri, 19 Apr 2024 16:14:29 -0300
Subject: [PATCH] Updates to support Brighterscript v1

---
 package-lock.json                             | 233 +++++++++++++-----
 package.json                                  |   2 +-
 src/Formatter.ts                              |  24 ++
 src/formatters/IndentFormatter.ts             |   6 +-
 src/formatters/InteriorWhitespaceFormatter.ts |   6 +-
 5 files changed, 205 insertions(+), 66 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 9e10a51..e90feb4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,7 +9,7 @@
             "version": "1.7.1",
             "license": "MIT",
             "dependencies": {
-                "brighterscript": "^0.65.27",
+                "brighterscript": "^1.0.0-alpha.29",
                 "glob-all": "^3.3.0",
                 "jsonc-parser": "^3.0.0",
                 "source-map": "^0.7.3",
@@ -1156,9 +1156,9 @@
             }
         },
         "node_modules/brighterscript": {
-            "version": "0.65.27",
-            "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.65.27.tgz",
-            "integrity": "sha512-G56OIzdh8D9GHPSt2LfmJ3amr4hkPXleECRTPWWI3fDvj9L7p7Vhk/g5HG/ClCkjTG/QwuYv7giNsMW8fB8VJA==",
+            "version": "1.0.0-alpha.29",
+            "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-1.0.0-alpha.29.tgz",
+            "integrity": "sha512-ODZjqKxv1lWWYNXRHoXGCuyoxjTSzy4U2BxiEddX2CpujdRPYoiRXkaVw45z6SBXEfFi+SNZUd5Gv4mqu5Kq6A==",
             "dependencies": {
                 "@rokucommunity/bslib": "^0.1.1",
                 "@xml-tools/parser": "^1.0.7",
@@ -1167,6 +1167,7 @@
                 "chevrotain": "^7.0.1",
                 "chokidar": "^3.5.1",
                 "clear": "^0.1.0",
+                "coveralls-next": "^4.2.0",
                 "cross-platform-clear-console": "^2.3.0",
                 "debounce-promise": "^3.1.0",
                 "eventemitter3": "^4.0.0",
@@ -1185,10 +1186,12 @@
                 "roku-deploy": "^3.12.0",
                 "serialize-error": "^7.0.1",
                 "source-map": "^0.7.4",
-                "vscode-languageserver": "^9.0.1",
-                "vscode-languageserver-protocol": "^3.17.5",
-                "vscode-languageserver-textdocument": "^1.0.11",
-                "vscode-uri": "^3.0.8",
+                "uuid": "^9.0.0",
+                "vscode-languageserver": "7.0.0",
+                "vscode-languageserver-protocol": "3.16.0",
+                "vscode-languageserver-textdocument": "^1.0.1",
+                "vscode-languageserver-types": "^3.17.3",
+                "vscode-uri": "^2.1.1",
                 "xml2js": "^0.5.0",
                 "yargs": "^16.2.0"
             },
@@ -1222,6 +1225,18 @@
                 "node": ">= 4.0.0"
             }
         },
+        "node_modules/brighterscript/node_modules/uuid": {
+            "version": "9.0.1",
+            "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+            "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+            "funding": [
+                "https://github.com/sponsors/broofa",
+                "https://github.com/sponsors/ctavan"
+            ],
+            "bin": {
+                "uuid": "dist/bin/uuid"
+            }
+        },
         "node_modules/brighterscript/node_modules/yargs": {
             "version": "16.2.0",
             "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
@@ -1514,6 +1529,53 @@
                 "node": ">=6"
             }
         },
+        "node_modules/coveralls-next": {
+            "version": "4.2.1",
+            "resolved": "https://registry.npmjs.org/coveralls-next/-/coveralls-next-4.2.1.tgz",
+            "integrity": "sha512-O/SBGZsCryt+6Q3NuJHENyQYaucTEV9qp0KGaed+y42PUh+GuF949LRLHKZbxWwOIc1tV8bJRIVWlfbZ8etEwQ==",
+            "dependencies": {
+                "form-data": "4.0.0",
+                "js-yaml": "4.1.0",
+                "lcov-parse": "1.0.0",
+                "log-driver": "1.2.7",
+                "minimist": "1.2.8"
+            },
+            "bin": {
+                "coveralls": "bin/coveralls.js"
+            },
+            "engines": {
+                "node": ">=16"
+            }
+        },
+        "node_modules/coveralls-next/node_modules/argparse": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+            "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+        },
+        "node_modules/coveralls-next/node_modules/form-data": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+            "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+            "dependencies": {
+                "asynckit": "^0.4.0",
+                "combined-stream": "^1.0.8",
+                "mime-types": "^2.1.12"
+            },
+            "engines": {
+                "node": ">= 6"
+            }
+        },
+        "node_modules/coveralls-next/node_modules/js-yaml": {
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+            "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+            "dependencies": {
+                "argparse": "^2.0.1"
+            },
+            "bin": {
+                "js-yaml": "bin/js-yaml.js"
+            }
+        },
         "node_modules/create-require": {
             "version": "1.1.1",
             "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
@@ -3173,7 +3235,6 @@
             "version": "1.0.0",
             "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz",
             "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=",
-            "dev": true,
             "bin": {
                 "lcov-parse": "bin/cli.js"
             }
@@ -3237,7 +3298,6 @@
             "version": "1.2.7",
             "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz",
             "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==",
-            "dev": true,
             "engines": {
                 "node": ">=0.8.6"
             }
@@ -3437,10 +3497,9 @@
             }
         },
         "node_modules/minimist": {
-            "version": "1.2.7",
-            "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
-            "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
-            "dev": true,
+            "version": "1.2.8",
+            "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+            "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
             "funding": {
                 "url": "https://github.com/sponsors/ljharb"
             }
@@ -5090,33 +5149,38 @@
             "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
         },
         "node_modules/vscode-jsonrpc": {
-            "version": "8.2.0",
-            "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
-            "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
+            "version": "6.0.0",
+            "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz",
+            "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==",
             "engines": {
-                "node": ">=14.0.0"
+                "node": ">=8.0.0 || >=10.0.0"
             }
         },
         "node_modules/vscode-languageserver": {
-            "version": "9.0.1",
-            "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz",
-            "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==",
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz",
+            "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==",
             "dependencies": {
-                "vscode-languageserver-protocol": "3.17.5"
+                "vscode-languageserver-protocol": "3.16.0"
             },
             "bin": {
                 "installServerIntoExtension": "bin/installServerIntoExtension"
             }
         },
         "node_modules/vscode-languageserver-protocol": {
-            "version": "3.17.5",
-            "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
-            "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
+            "version": "3.16.0",
+            "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz",
+            "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==",
             "dependencies": {
-                "vscode-jsonrpc": "8.2.0",
-                "vscode-languageserver-types": "3.17.5"
+                "vscode-jsonrpc": "6.0.0",
+                "vscode-languageserver-types": "3.16.0"
             }
         },
+        "node_modules/vscode-languageserver-protocol/node_modules/vscode-languageserver-types": {
+            "version": "3.16.0",
+            "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz",
+            "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA=="
+        },
         "node_modules/vscode-languageserver-textdocument": {
             "version": "1.0.11",
             "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz",
@@ -5128,9 +5192,9 @@
             "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="
         },
         "node_modules/vscode-uri": {
-            "version": "3.0.8",
-            "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
-            "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw=="
+            "version": "2.1.2",
+            "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz",
+            "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A=="
         },
         "node_modules/which": {
             "version": "1.3.1",
@@ -6196,9 +6260,9 @@
             }
         },
         "brighterscript": {
-            "version": "0.65.27",
-            "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.65.27.tgz",
-            "integrity": "sha512-G56OIzdh8D9GHPSt2LfmJ3amr4hkPXleECRTPWWI3fDvj9L7p7Vhk/g5HG/ClCkjTG/QwuYv7giNsMW8fB8VJA==",
+            "version": "1.0.0-alpha.29",
+            "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-1.0.0-alpha.29.tgz",
+            "integrity": "sha512-ODZjqKxv1lWWYNXRHoXGCuyoxjTSzy4U2BxiEddX2CpujdRPYoiRXkaVw45z6SBXEfFi+SNZUd5Gv4mqu5Kq6A==",
             "requires": {
                 "@rokucommunity/bslib": "^0.1.1",
                 "@xml-tools/parser": "^1.0.7",
@@ -6207,6 +6271,7 @@
                 "chevrotain": "^7.0.1",
                 "chokidar": "^3.5.1",
                 "clear": "^0.1.0",
+                "coveralls-next": "^4.2.0",
                 "cross-platform-clear-console": "^2.3.0",
                 "debounce-promise": "^3.1.0",
                 "eventemitter3": "^4.0.0",
@@ -6225,10 +6290,12 @@
                 "roku-deploy": "^3.12.0",
                 "serialize-error": "^7.0.1",
                 "source-map": "^0.7.4",
-                "vscode-languageserver": "^9.0.1",
-                "vscode-languageserver-protocol": "^3.17.5",
-                "vscode-languageserver-textdocument": "^1.0.11",
-                "vscode-uri": "^3.0.8",
+                "uuid": "^9.0.0",
+                "vscode-languageserver": "7.0.0",
+                "vscode-languageserver-protocol": "3.16.0",
+                "vscode-languageserver-textdocument": "^1.0.1",
+                "vscode-languageserver-types": "^3.17.3",
+                "vscode-uri": "^2.1.1",
                 "xml2js": "^0.5.0",
                 "yargs": "^16.2.0"
             },
@@ -6253,6 +6320,11 @@
                     "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
                     "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
                 },
+                "uuid": {
+                    "version": "9.0.1",
+                    "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+                    "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="
+                },
                 "yargs": {
                     "version": "16.2.0",
                     "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
@@ -6480,6 +6552,43 @@
                 "request": "^2.88.2"
             }
         },
+        "coveralls-next": {
+            "version": "4.2.1",
+            "resolved": "https://registry.npmjs.org/coveralls-next/-/coveralls-next-4.2.1.tgz",
+            "integrity": "sha512-O/SBGZsCryt+6Q3NuJHENyQYaucTEV9qp0KGaed+y42PUh+GuF949LRLHKZbxWwOIc1tV8bJRIVWlfbZ8etEwQ==",
+            "requires": {
+                "form-data": "4.0.0",
+                "js-yaml": "4.1.0",
+                "lcov-parse": "1.0.0",
+                "log-driver": "1.2.7",
+                "minimist": "1.2.8"
+            },
+            "dependencies": {
+                "argparse": {
+                    "version": "2.0.1",
+                    "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+                    "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+                },
+                "form-data": {
+                    "version": "4.0.0",
+                    "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+                    "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+                    "requires": {
+                        "asynckit": "^0.4.0",
+                        "combined-stream": "^1.0.8",
+                        "mime-types": "^2.1.12"
+                    }
+                },
+                "js-yaml": {
+                    "version": "4.1.0",
+                    "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+                    "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+                    "requires": {
+                        "argparse": "^2.0.1"
+                    }
+                }
+            }
+        },
         "create-require": {
             "version": "1.1.1",
             "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
@@ -7732,8 +7841,7 @@
         "lcov-parse": {
             "version": "1.0.0",
             "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz",
-            "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=",
-            "dev": true
+            "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A="
         },
         "levn": {
             "version": "0.4.1",
@@ -7787,8 +7895,7 @@
         "log-driver": {
             "version": "1.2.7",
             "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz",
-            "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==",
-            "dev": true
+            "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg=="
         },
         "log-symbols": {
             "version": "4.1.0",
@@ -7929,10 +8036,9 @@
             }
         },
         "minimist": {
-            "version": "1.2.7",
-            "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
-            "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
-            "dev": true
+            "version": "1.2.8",
+            "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+            "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
         },
         "mocha": {
             "version": "9.2.0",
@@ -9180,25 +9286,32 @@
             }
         },
         "vscode-jsonrpc": {
-            "version": "8.2.0",
-            "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
-            "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA=="
+            "version": "6.0.0",
+            "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz",
+            "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg=="
         },
         "vscode-languageserver": {
-            "version": "9.0.1",
-            "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz",
-            "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==",
+            "version": "7.0.0",
+            "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz",
+            "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==",
             "requires": {
-                "vscode-languageserver-protocol": "3.17.5"
+                "vscode-languageserver-protocol": "3.16.0"
             }
         },
         "vscode-languageserver-protocol": {
-            "version": "3.17.5",
-            "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
-            "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
+            "version": "3.16.0",
+            "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz",
+            "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==",
             "requires": {
-                "vscode-jsonrpc": "8.2.0",
-                "vscode-languageserver-types": "3.17.5"
+                "vscode-jsonrpc": "6.0.0",
+                "vscode-languageserver-types": "3.16.0"
+            },
+            "dependencies": {
+                "vscode-languageserver-types": {
+                    "version": "3.16.0",
+                    "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz",
+                    "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA=="
+                }
             }
         },
         "vscode-languageserver-textdocument": {
@@ -9212,9 +9325,9 @@
             "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="
         },
         "vscode-uri": {
-            "version": "3.0.8",
-            "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
-            "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw=="
+            "version": "2.1.2",
+            "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz",
+            "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A=="
         },
         "which": {
             "version": "1.3.1",
diff --git a/package.json b/package.json
index 944e987..b5c50ca 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,7 @@
         "brighterscript-formatter": "dist/cli.js"
     },
     "dependencies": {
-        "brighterscript": "^0.65.27",
+        "brighterscript": "^1.0.0-alpha.29",
         "glob-all": "^3.3.0",
         "jsonc-parser": "^3.0.0",
         "source-map": "^0.7.3",
diff --git a/src/Formatter.ts b/src/Formatter.ts
index eec4a0b..ba345b3 100644
--- a/src/Formatter.ts
+++ b/src/Formatter.ts
@@ -1,3 +1,4 @@
+import type { Token } from 'brighterscript';
 import { Lexer, ParseMode, Parser, TokenKind } from 'brighterscript';
 import { SourceNode } from 'source-map';
 import { DEFAULT_INDENT_SPACE_COUNT } from './constants';
@@ -111,6 +112,8 @@ export class Formatter {
             }
         );
 
+        tokens = this.includeCommentTokens(tokens);
+
         if (options.formatMultiLineObjectsAndArrays) {
             tokens = this.formatters.multiLineItem.format(tokens);
         }
@@ -142,6 +145,27 @@ export class Formatter {
         return tokens;
     }
 
+    private includeCommentTokens(tokens: Token[]) {
+        //bring out comments as their own tokens
+        let whiteSpaceTokens = [] as Array<Token>;
+        const tokensWithComments = [] as Array<Token>;
+        for (const token of tokens) {
+            if (token.kind === TokenKind.Newline || token.kind === TokenKind.Whitespace) {
+                whiteSpaceTokens.push(token);
+                continue;
+            }
+            if (token.leadingTrivia.find(x => x.kind === TokenKind.Comment)) {
+                tokensWithComments.push(...token.leadingTrivia);
+                whiteSpaceTokens = [];
+            }
+            tokensWithComments.push(...whiteSpaceTokens);
+            tokensWithComments.push(token);
+            whiteSpaceTokens = [];
+        }
+        tokensWithComments.push(...whiteSpaceTokens);
+        return tokensWithComments;
+    }
+
     /**
      * Convert the character at the specified index to upper case
      * @deprecated
diff --git a/src/formatters/IndentFormatter.ts b/src/formatters/IndentFormatter.ts
index cc54164..c32f72d 100644
--- a/src/formatters/IndentFormatter.ts
+++ b/src/formatters/IndentFormatter.ts
@@ -99,7 +99,7 @@ export class IndentFormatter {
                         //does not have an end if
                         !endIfToken ||
                         //end if is on same line as if
-                        ifStatement.tokens.if.range.end.line === endIfToken.range.end.line
+                        ifStatement.tokens.if?.range.end.line === endIfToken.range.end.line
                     )
                 ) {
                     //if there's an `else`, skip past it since it'll cause de-indent otherwise
@@ -252,7 +252,9 @@ export class IndentFormatter {
 
         parser.ast.walk(createVisitor({
             IfStatement: (statement) => {
-                ifStatements.set(statement.tokens.if, statement);
+                if (statement.tokens.if) {
+                    ifStatements.set(statement.tokens.if, statement);
+                }
             }
         }), {
             walkMode: WalkMode.visitAllRecursive
diff --git a/src/formatters/InteriorWhitespaceFormatter.ts b/src/formatters/InteriorWhitespaceFormatter.ts
index 963e589..ea946a1 100644
--- a/src/formatters/InteriorWhitespaceFormatter.ts
+++ b/src/formatters/InteriorWhitespaceFormatter.ts
@@ -337,11 +337,11 @@ export class InteriorWhitespaceFormatter {
 
         //find all of the AA literals
         for (let aaLiteral of aaLiterals) {
-            for (let element of (aaLiteral.elements as AAMemberExpression[])) {
+            for (let element of aaLiteral.elements) {
                 //our target elements should have both `key` and `colon` and they should both be on the same line
-                if (element.keyToken && element.colonToken && element.keyToken.range.end.line === element.colonToken.range.end.line) {
+                if (element.tokens.key && element.tokens.colon && element.tokens.key.range.end.line === element.tokens.colon.range.end.line) {
                     let whitespaceToken: Token;
-                    let idx = tokens.indexOf(element.keyToken);
+                    let idx = tokens.indexOf(element.tokens.key);
                     let nextToken = tokens[idx + 1];
                     if (nextToken.kind === TokenKind.Whitespace) {
                         whitespaceToken = nextToken;