From d83b499659c0cf5f8bae3beafb6cceefa9302067 Mon Sep 17 00:00:00 2001 From: Mark Pearce 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; + const tokensWithComments = [] as Array; + 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;