Compare commits

..

18 commits
0.1.0 ... trunk

Author SHA1 Message Date
koniifer 9d4a8b8246 Update README.md 2025-02-02 06:56:24 -06:00
koniifer a33019b088 fix more 2024-12-21 17:22:26 +00:00
koniifer cb7011ac46 fixes & support new char & array syntaxes 2024-12-21 17:04:31 +00:00
koniifer 8cbf55a627 fix missing keywords 2024-12-18 19:25:11 +00:00
koniifer 04d662ee42 minor update 2024-12-16 13:23:50 +00:00
koniifer 18199666d8 forgot to bump version 2024-11-30 23:22:55 +00:00
koniifer bb58baa09c maybe working 2024-11-30 23:22:30 +00:00
koniifer fa7a4bd245 update & improve grammar somewhat 2024-11-15 21:20:50 +00:00
koniifer 99f66d803a better instructions 2024-11-10 15:07:40 -06:00
koniifer bc84098b77 patch 2024-11-08 21:50:37 +00:00
koniifer d146f51e59 bump version 2024-11-08 21:49:29 +00:00
koniifer 8ad44334d8 0.2.1, bug fixes and new match new compiler 2024-11-08 21:49:10 +00:00
koniifer 69a82a563e don't make people use nightly as default, that is stupid 2024-11-08 13:22:32 -06:00
koniifer c3ade921d7 release 0.2.0
+ error linting
+ clearer missing hblang message
+ misc
2024-11-07 18:59:47 +00:00
koniifer 7c48aa6cad update readme for common problem 2024-10-25 05:32:52 -05:00
koniifer 4b5bb991f7 good enough formatter 2024-09-30 12:57:01 +01:00
koniifer 9098604bf0 fix struct highlight 2024-09-28 16:27:58 +01:00
koniifer adaccda70b fixes 2024-09-28 16:12:59 +01:00
9 changed files with 427 additions and 245 deletions

13
.vscodeignore Normal file
View file

@ -0,0 +1,13 @@
# ---> VisualStudioCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets
# Local History for Visual Studio Code
.history/
# Built Visual Studio Code Extensions
*.vsix

View file

@ -4,8 +4,11 @@ syntax highlighting for hblang in vscode
# Usage guide: # Usage guide:
1. run `cargo install hblang --git https://git.ablecorp.us/ableos/holey-bytes` 1. `cargo +nightly install hblang --git https://git.ablecorp.us/ableos/holey-bytes hbc --debug`
2. add `$HOME/.cargo/bin` (or wherever you installed hblang) to `$PATH` > remember to keep this updated
2.
- add `$HOME/.cargo/bin` (or wherever you installed hblang) to `$PATH`
> in bash, `export PATH=$PATH:$HOME/.cargo/bin`<br> > in bash, `export PATH=$PATH:$HOME/.cargo/bin`<br>
> in other shells, there may be other ways > in other shells, there may be other ways
- alternatively, add the path you installed hblang to the extension settings
3. log out and log back in (or something, idk) 3. log out and log back in (or something, idk)

View file

@ -68,12 +68,12 @@
], ],
"folding": { "folding": {
"markers": { "markers": {
"start": "^\\s*//\\s*#region\\b", "start": "{\n",
"end": "^\\s*//\\s*#endregion\\b" "end": "}"
} }
}, },
"indentationRules": { "indentationRules": {
"increaseIndentPattern": "{", "increaseIndentPattern": "{\\s+",
"decreaseIndentPattern": "}" "decreaseIndentPattern": "\\s+}\\$"
}, },
} }

220
package-lock.json generated
View file

@ -1,12 +1,12 @@
{ {
"name": "hblang", "name": "hblang",
"version": "0.1.0", "version": "0.2.7",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "hblang", "name": "hblang",
"version": "0.1.0", "version": "0.2.7",
"devDependencies": { "devDependencies": {
"@types/vscode": "^1.75.0", "@types/vscode": "^1.75.0",
"os-browserify": "^0.3.0", "os-browserify": "^0.3.0",
@ -15,8 +15,8 @@
"ts-loader": "^9.5.1", "ts-loader": "^9.5.1",
"typescript": "^4.0.0", "typescript": "^4.0.0",
"vscode": "^1.1.37", "vscode": "^1.1.37",
"webpack": "^5.0.0", "webpack": "^5.97.1",
"webpack-cli": "^4.0.0" "webpack-cli": "^4.10.0"
}, },
"engines": { "engines": {
"vscode": "^1.75.0" "vscode": "^1.75.0"
@ -106,6 +106,28 @@
"node": ">= 6" "node": ">= 6"
} }
}, },
"node_modules/@types/eslint": {
"version": "9.6.1",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
"integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/estree": "*",
"@types/json-schema": "*"
}
},
"node_modules/@types/eslint-scope": {
"version": "3.7.7",
"resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
"integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/eslint": "*",
"@types/estree": "*"
}
},
"node_modules/@types/estree": { "node_modules/@types/estree": {
"version": "1.0.6", "version": "1.0.6",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
@ -135,73 +157,73 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@webassemblyjs/ast": { "node_modules/@webassemblyjs/ast": {
"version": "1.12.1", "version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
"integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-numbers": "1.13.2",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6" "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
} }
}, },
"node_modules/@webassemblyjs/floating-point-hex-parser": { "node_modules/@webassemblyjs/floating-point-hex-parser": {
"version": "1.11.6", "version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
"integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@webassemblyjs/helper-api-error": { "node_modules/@webassemblyjs/helper-api-error": {
"version": "1.11.6", "version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
"integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@webassemblyjs/helper-buffer": { "node_modules/@webassemblyjs/helper-buffer": {
"version": "1.12.1", "version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
"integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@webassemblyjs/helper-numbers": { "node_modules/@webassemblyjs/helper-numbers": {
"version": "1.11.6", "version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
"integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/floating-point-hex-parser": "1.13.2",
"@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-api-error": "1.13.2",
"@xtuc/long": "4.2.2" "@xtuc/long": "4.2.2"
} }
}, },
"node_modules/@webassemblyjs/helper-wasm-bytecode": { "node_modules/@webassemblyjs/helper-wasm-bytecode": {
"version": "1.11.6", "version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
"integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@webassemblyjs/helper-wasm-section": { "node_modules/@webassemblyjs/helper-wasm-section": {
"version": "1.12.1", "version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
"integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@webassemblyjs/ast": "1.12.1", "@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-buffer": "1.14.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
"@webassemblyjs/wasm-gen": "1.12.1" "@webassemblyjs/wasm-gen": "1.14.1"
} }
}, },
"node_modules/@webassemblyjs/ieee754": { "node_modules/@webassemblyjs/ieee754": {
"version": "1.11.6", "version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
"integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -209,9 +231,9 @@
} }
}, },
"node_modules/@webassemblyjs/leb128": { "node_modules/@webassemblyjs/leb128": {
"version": "1.11.6", "version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
"integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
"dev": true, "dev": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
@ -219,79 +241,79 @@
} }
}, },
"node_modules/@webassemblyjs/utf8": { "node_modules/@webassemblyjs/utf8": {
"version": "1.11.6", "version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
"integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@webassemblyjs/wasm-edit": { "node_modules/@webassemblyjs/wasm-edit": {
"version": "1.12.1", "version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
"integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@webassemblyjs/ast": "1.12.1", "@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-buffer": "1.14.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
"@webassemblyjs/helper-wasm-section": "1.12.1", "@webassemblyjs/helper-wasm-section": "1.14.1",
"@webassemblyjs/wasm-gen": "1.12.1", "@webassemblyjs/wasm-gen": "1.14.1",
"@webassemblyjs/wasm-opt": "1.12.1", "@webassemblyjs/wasm-opt": "1.14.1",
"@webassemblyjs/wasm-parser": "1.12.1", "@webassemblyjs/wasm-parser": "1.14.1",
"@webassemblyjs/wast-printer": "1.12.1" "@webassemblyjs/wast-printer": "1.14.1"
} }
}, },
"node_modules/@webassemblyjs/wasm-gen": { "node_modules/@webassemblyjs/wasm-gen": {
"version": "1.12.1", "version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
"integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@webassemblyjs/ast": "1.12.1", "@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
"@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/ieee754": "1.13.2",
"@webassemblyjs/leb128": "1.11.6", "@webassemblyjs/leb128": "1.13.2",
"@webassemblyjs/utf8": "1.11.6" "@webassemblyjs/utf8": "1.13.2"
} }
}, },
"node_modules/@webassemblyjs/wasm-opt": { "node_modules/@webassemblyjs/wasm-opt": {
"version": "1.12.1", "version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
"integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@webassemblyjs/ast": "1.12.1", "@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-buffer": "1.14.1",
"@webassemblyjs/wasm-gen": "1.12.1", "@webassemblyjs/wasm-gen": "1.14.1",
"@webassemblyjs/wasm-parser": "1.12.1" "@webassemblyjs/wasm-parser": "1.14.1"
} }
}, },
"node_modules/@webassemblyjs/wasm-parser": { "node_modules/@webassemblyjs/wasm-parser": {
"version": "1.12.1", "version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
"integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@webassemblyjs/ast": "1.12.1", "@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-api-error": "1.13.2",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
"@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/ieee754": "1.13.2",
"@webassemblyjs/leb128": "1.11.6", "@webassemblyjs/leb128": "1.13.2",
"@webassemblyjs/utf8": "1.11.6" "@webassemblyjs/utf8": "1.13.2"
} }
}, },
"node_modules/@webassemblyjs/wast-printer": { "node_modules/@webassemblyjs/wast-printer": {
"version": "1.12.1", "version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
"integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@webassemblyjs/ast": "1.12.1", "@webassemblyjs/ast": "1.14.1",
"@xtuc/long": "4.2.2" "@xtuc/long": "4.2.2"
} }
}, },
@ -349,9 +371,9 @@
"license": "Apache-2.0" "license": "Apache-2.0"
}, },
"node_modules/acorn": { "node_modules/acorn": {
"version": "8.12.1", "version": "8.14.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
"integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"bin": { "bin": {
@ -361,16 +383,6 @@
"node": ">=0.4.0" "node": ">=0.4.0"
} }
}, },
"node_modules/acorn-import-attributes": {
"version": "1.9.5",
"resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
"integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
"dev": true,
"license": "MIT",
"peerDependencies": {
"acorn": "^8"
}
},
"node_modules/agent-base": { "node_modules/agent-base": {
"version": "6.0.2", "version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
@ -2067,19 +2079,19 @@
} }
}, },
"node_modules/webpack": { "node_modules/webpack": {
"version": "5.95.0", "version": "5.97.1",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz",
"integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@types/estree": "^1.0.5", "@types/eslint-scope": "^3.7.7",
"@webassemblyjs/ast": "^1.12.1", "@types/estree": "^1.0.6",
"@webassemblyjs/wasm-edit": "^1.12.1", "@webassemblyjs/ast": "^1.14.1",
"@webassemblyjs/wasm-parser": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.14.1",
"acorn": "^8.7.1", "@webassemblyjs/wasm-parser": "^1.14.1",
"acorn-import-attributes": "^1.9.5", "acorn": "^8.14.0",
"browserslist": "^4.21.10", "browserslist": "^4.24.0",
"chrome-trace-event": "^1.0.2", "chrome-trace-event": "^1.0.2",
"enhanced-resolve": "^5.17.1", "enhanced-resolve": "^5.17.1",
"es-module-lexer": "^1.2.1", "es-module-lexer": "^1.2.1",

View file

@ -5,18 +5,18 @@
}, },
"publisher": "koniifer", "publisher": "koniifer",
"displayName": "hblang", "displayName": "hblang",
"description": "Syntax highlighter and formatter for holey-bytes lang", "description": "Syntax, formatting, and linting for holey-bytes lang",
"version": "0.1.0", "version": "0.2.8",
"engines": { "engines": {
"vscode": "^1.75.0" "vscode": "^1.75.0"
}, },
"main": "./out/main.js", "main": "./out/main.js",
"categories": [ "categories": [
"Programming Languages", "Programming Languages",
"Formatters" "Formatters",
"Linters"
], ],
"activationEvents": [ "activationEvents": [
"onLanguage:hblang",
"onCommand:extension.formatDocument" "onCommand:extension.formatDocument"
], ],
"contributes": { "contributes": {
@ -48,7 +48,18 @@
} }
} }
} }
] ],
"configuration": {
"title": "hblang",
"properties": {
"hblang.compilerPath": {
"type": "string",
"default": "PATH",
"description": "Set the optional path for the hbc compiler. If set to 'PATH', it will rely on the system to provide hbc.",
"scope": "machine-overridable"
}
}
}
}, },
"scripts": { "scripts": {
"vscode:prepublish": "webpack", "vscode:prepublish": "webpack",
@ -63,7 +74,7 @@
"ts-loader": "^9.5.1", "ts-loader": "^9.5.1",
"typescript": "^4.0.0", "typescript": "^4.0.0",
"vscode": "^1.1.37", "vscode": "^1.1.37",
"webpack": "^5.0.0", "webpack": "^5.97.1",
"webpack-cli": "^4.0.0" "webpack-cli": "^4.10.0"
} }
} }

View file

@ -1,66 +1,158 @@
import * as vscode from 'vscode'; import * as vscode from "vscode";
import { spawn } from 'child_process'; import { execFile } from "child_process";
import * as fs from 'fs'; import * as fs from "fs";
import * as os from 'os'; import * as path from "path";
import * as path from 'path';
export function activate(context: vscode.ExtensionContext) { const DEFAULT_EXECUTABLE = "hbc";
// Register a document formatting edit provider for the language let diagnosticCollection: vscode.DiagnosticCollection;
context.subscriptions.push(
vscode.languages.registerDocumentFormattingEditProvider('hblang', {
async provideDocumentFormattingEdits(document: vscode.TextDocument): Promise<vscode.TextEdit[]> {
try { function getExecutablePath(): string {
const formattedText = await formatDocument(document.fileName); const config = vscode.workspace.getConfiguration("hblang");
return config.get<string>("compilerPath") === "PATH"
? DEFAULT_EXECUTABLE
: config.get<string>("compilerPath")!;
}
const edit = new vscode.TextEdit( function isAbleosRepo(document: vscode.TextDocument): boolean {
new vscode.Range(0, 0, document.lineCount, 0), const workspaceFolder = vscode.workspace.getWorkspaceFolder(document.uri);
formattedText if (!workspaceFolder) return false;
return workspaceFolder.name.toLowerCase().includes("ableos");
}
async function runCommand(
filePath: string,
args: string[],
cwd: string,
): Promise<string> {
return new Promise((resolve, reject) => {
execFile(getExecutablePath(), args, { cwd }, (error, stdout, stderr) => {
if (error && error.code === "ENOENT") {
vscode.window.showErrorMessage(
"hblang compiler not found. Ensure 'hbc' is installed and available in PATH."
);
return reject(new Error(`Compiler not found: ${stderr || stdout}`));
}
return error
? reject(new Error(stderr || `Exit code: ${error.code}`))
: resolve(stdout);
});
});
}
async function provideDocumentFormattingEdits(
document: vscode.TextDocument
): Promise<vscode.TextEdit[]> {
const tempFilePath = path.join(
path.dirname(document.uri.fsPath),
`temp_${path.basename(document.uri.fsPath)}`
); );
return [edit]; try {
} catch (error: unknown) { await document.save();
await fs.promises.writeFile(tempFilePath, document.getText());
const args = ["--fmt-stdout", tempFilePath];
if (isAbleosRepo(document)) {
args.push("--path-resolver", "ableos");
}
const workspaceFolder = vscode.workspace.getWorkspaceFolder(document.uri);
if (!workspaceFolder) {
throw new Error("Workspace folder not found.");
}
const stdout = await runCommand(tempFilePath, args, workspaceFolder.uri.fsPath);
const fullRange = new vscode.Range(
document.positionAt(0),
document.positionAt(document.getText().length)
);
return [vscode.TextEdit.replace(fullRange, stdout)];
} catch (error) {
if (error instanceof Error) { if (error instanceof Error) {
vscode.window.showErrorMessage(`Formatting failed: ${error.message}`); vscode.window.showErrorMessage(`Formatting failed: ${error.message}`);
} else { } else {
vscode.window.showErrorMessage(`Formatting failed: ${String(error)}`); vscode.window.showErrorMessage(`Formatting failed: Unknown error`);
} }
return []; // Return an empty array if formatting fails return [];
} finally {
fs.promises.unlink(tempFilePath).catch(console.error);
} }
}
})
);
} }
export function deactivate() { }
async function formatDocument(path: string): Promise<string> {
async function lintDocument(document: vscode.TextDocument) {
const args = [document.uri.fsPath];
if (isAbleosRepo(document)) {
args.push("--path-resolver", "ableos");
}
return new Promise((resolve, reject) => { try {
const child = spawn('hbc', ['--fmt-stdout', path], { shell: true }); const workspaceFolder = vscode.workspace.getWorkspaceFolder(document.uri);
if (!workspaceFolder) { };
let formattedText = ''; const stderr = await runCommand(document.uri.fsPath, args, workspaceFolder?.uri.fsPath || document.uri.fsPath);
diagnosticCollection.set(document.uri, parseLintingErrors(stderr));
// Capture the output } catch (error) {
child.stdout.on('data', (data) => { if (error instanceof Error) {
formattedText += data.toString(); diagnosticCollection.set(document.uri, parseLintingErrors(error.message));
});
// Handle errors
child.stderr.on('data', (data) => {
reject(new Error(data.toString()));
});
// Handle process exit
child.on('exit', (code) => {
if (code === 0) {
resolve(formattedText);
} else { } else {
reject(new Error(`Formatter exited with code ${code}`)); vscode.window.showErrorMessage("Error linting hblang document.");
}
}
}
function parseLintingErrors(stderr: string): vscode.Diagnostic[] {
return stderr
.split("\n")
.filter((line) => line && !line.includes("missing main function"))
.map((lineText) => {
const match = lineText.match(/^([^:]+):(\d+):(\d+):\s*(.+)$/);
if (!match) return null;
const [abc, , lineStr, columnStr, message] = match;
const lineNum = parseInt(lineStr, 10) - 1;
const columnNum = parseInt(columnStr, 10) - 1;
const severity = abc.startsWith("(W) ")
? vscode.DiagnosticSeverity.Warning
: vscode.DiagnosticSeverity.Error;
return new vscode.Diagnostic(
new vscode.Range(
lineNum,
columnNum,
lineNum,
columnNum + message.length
),
message,
severity
);
})
.filter(Boolean) as vscode.Diagnostic[];
}
export function activate(context: vscode.ExtensionContext) {
diagnosticCollection = vscode.languages.createDiagnosticCollection("hblang");
context.subscriptions.push(diagnosticCollection);
vscode.workspace.onDidSaveTextDocument(async (document) => {
if (document.languageId === "hblang") {
await lintDocument(document);
if (diagnosticCollection.get(document.uri)?.length === 0) {
vscode.commands.executeCommand(
"editor.action.formatDocument",
document
);
}
} }
}); });
vscode.languages.registerDocumentFormattingEditProvider("hblang", {
provideDocumentFormattingEdits,
}); });
} }

View file

@ -19,19 +19,16 @@
"include": "#string" "include": "#string"
}, },
{ {
"include": "#number" "include": "#struct"
}, },
{ {
"include": "#keyword" "include": "#keyword"
}, },
{ {
"include": "#struct" "include": "#number"
}, },
{ {
"include": "#type" "include": "#punctuation"
},
{
"include": "#variable"
}, },
{ {
"include": "#function" "include": "#function"
@ -40,7 +37,10 @@
"include": "#operator" "include": "#operator"
}, },
{ {
"include": "#punctuation" "include": "#variable"
},
{
"include": "#type"
}, },
{ {
"include": "#array" "include": "#array"
@ -51,19 +51,31 @@
"patterns": [ "patterns": [
{ {
"name": "variable.parameter.hblang", "name": "variable.parameter.hblang",
"match": "\\b\\w+\\b" "match": "\\b\\w+\\s*:\\s*(?:\\^)?[\\w\\$]+\\b"
} }
] ]
}, },
"number": { "number": {
"patterns": [ "patterns": [
{ {
"name": "constant.numeric.hblang", "name": "constant.numeric.float.hblang",
"match": "\\b\\d+(\\.\\d+)?\\b" "match": "\\b\\d+\\.\\d+\\b"
}, },
{ {
"name": "constant.numeric.hex.hblang", "name": "constant.numeric.hex.hblang",
"match": "0x[0-9A-Fa-f]+" "match": "0x[0-9A-Fa-f]+"
},
{
"name": "constant.numeric.binary.hblang",
"match": "0b[0-1]+"
},
{
"name": "constant.numeric.octal.hblang",
"match": "0o[0-7]+"
},
{
"name": "constant.numeric.decimal.hblang",
"match": "\\b\\d+\\b"
} }
] ]
}, },
@ -87,23 +99,20 @@
"name": "string.quoted.double.hblang", "name": "string.quoted.double.hblang",
"begin": "\"", "begin": "\"",
"end": "\"", "end": "\"",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.hblang"
}
},
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.hblang"
}
},
"patterns": [ "patterns": [
{ {
"name": "constant.character.escape.hblang", "name": "constant.character.escape.hblang",
"match": "\\\\[\"'\\\\bfnrt]|\\\\(\\{[^}]+\\}|\\[[^]]+\\]|[a-zA-Z])" "match": "\\\\."
}
]
}, },
{ {
"name": "invalid.illegal.escaped.hblang", "name": "string.quoted.single.hblang",
"begin": "'",
"end": "'",
"patterns": [
{
"name": "constant.character.escape.hblang",
"match": "\\\\." "match": "\\\\."
} }
] ]
@ -114,7 +123,7 @@
"patterns": [ "patterns": [
{ {
"name": "keyword.control.hblang", "name": "keyword.control.hblang",
"match": "\\b(loop|break|if|else|return|packed|continue|true|false|struct|idk)\\b" "match": "(?<!\\w)\\b(fn|loop|break|if|else|return|packed|continue|true|false|struct|idk|die|null|defer|union|enum|match)\\b(?!\\w)"
} }
] ]
}, },
@ -122,44 +131,39 @@
"patterns": [ "patterns": [
{ {
"name": "storage.type.hblang", "name": "storage.type.hblang",
"match": "\\buint|int|(u|i)(8|16|32)|void|bool|[A-Z]\\w+\\b" "match": "(?<!\\w)\\b(f(32|64)|uint|int|u(8|16|32)|i(8|16|32)|void|bool|type|never)\\b(?!\\w)"
} }
] ]
}, },
"variable": { "variable": {
"patterns": [ "patterns": [
{ {
"name": "variable.other.declaration.hblang", "name": "variable.declaration.hblang",
"match": "\\b\\w+\\s*:=\\b" "match": "\\b\\w+\\b(?=\\s*:=)"
}, },
{ {
"name": "variable.other.assignment.hblang", "name": "variable.assignment.hblang",
"match": "\\b\\w+\\s*=\\b" "match": "\\b\\w+\\b(?=\\s*=(?!=))"
},
{
"name": "variable.member.hblang",
"match": "(?<=\\.)\\w+\\b"
} }
] ]
}, },
"operator": { "operator": {
"patterns": [ "patterns": [
{
"name": "keyword.operator.assignment.hblang",
"match": ":="
},
{
"name": "keyword.operator.assignment.hblang",
"match": "=(?!=)"
},
{ {
"name": "keyword.operator.hblang", "name": "keyword.operator.hblang",
"match": "(@|:=|<<=|>>=|>=|<=|^=|\\+=|-=|\\*=|\\/=|%=|\\|=|&=|\\^|\\*|&|&&|\\|\\||<<|>>|\\+|\\-|\\/|%|\\||!|==|!=|<|>|=)" "match": "(\\$|\\?|@|<<=|>>=|>=|<=|\\^=|\\+=|-=|\\*=|\\/=|%=|\\|=|&=|\\^|\\*|&|<<|>>|\\+|\\-|\\/|%|\\||!|==|!=|<|>)"
}
]
},
"function": {
"patterns": [
{
"name": "entity.name.function.hblang",
"begin": "\\b\\w+\\s*\\(",
"end": "\\)",
"patterns": [
{
"include": "#all"
},
{
"include": "#parameter"
}
]
} }
] ]
}, },
@ -167,16 +171,7 @@
"patterns": [ "patterns": [
{ {
"name": "entity.name.type.struct.hblang", "name": "entity.name.type.struct.hblang",
"match": "\\b[A-Z]\\w+\\b" "match": "\\b[A-Z]\\w*\\b"
}
]
},
"array": {
"patterns": [
{
"name": "storage.type.array.hblang",
"begin": "\\.\\(",
"end": "\\)"
} }
] ]
}, },
@ -184,7 +179,61 @@
"patterns": [ "patterns": [
{ {
"name": "punctuation.terminator.statement.hblang", "name": "punctuation.terminator.statement.hblang",
"match": ";|\\.|,|:" "match": ";|\\.|,|(?<!:):(?!=)"
}
]
},
"function": {
"patterns": [
{
"name": "meta.function.declaration.hblang",
"begin": "(\\b\\w+\\b)\\s*(:=)\\s*(fn)\\s*\\(",
"end": "\\)",
"beginCaptures": {
"1": {
"name": "entity.name.function.hblang"
},
"2": {
"name": "keyword.operator.assignment.hblang"
},
"3": {
"name": "keyword.control.hblang"
}
},
"patterns": [
{
"include": "#all"
}
]
},
{
"name": "meta.function.call.hblang",
"begin": "@?\\w+\\s*\\(",
"end": "\\)",
"beginCaptures": {
"0": {
"name": "entity.name.function.hblang"
}
},
"patterns": [
{
"include": "#all"
}
]
}
]
},
"array": {
"patterns": [
{
"name": "meta.array.initialization.hblang",
"begin": "\\.\\[",
"end": "\\]",
"patterns": [
{
"include": "#all"
}
]
} }
] ]
} }

3
tests/dont-erase.hb Normal file
View file

@ -0,0 +1,3 @@
main := fn(): void {
undefined_identifier
}

View file

@ -6,20 +6,19 @@ module.exports = {
output: { output: {
path: path.resolve(__dirname, 'out'), path: path.resolve(__dirname, 'out'),
filename: 'main.js', filename: 'main.js',
libraryTarget: 'commonjs2' // This is correct for VS Code extensions libraryTarget: 'commonjs2'
}, },
resolve: { resolve: {
extensions: ['.ts', '.js'], extensions: ['.ts', '.js'],
fallback: { fallback: {
// For Node.js core modules not available in browser context, you set them to false "child_process": false,
"child_process": false, // Not used in browser context "fs": false,
"fs": false, // Not used in browser context "os": require.resolve("os-browserify/browser"),
"os": require.resolve("os-browserify/browser"), // Polyfill for os "path": require.resolve("path-browserify"),
"path": require.resolve("path-browserify"), // Polyfill for path
}, },
}, },
externals: { externals: {
vscode: 'commonjs vscode' // Externalize the vscode module vscode: 'commonjs vscode'
}, },
module: { module: {
rules: [ rules: [
@ -30,5 +29,5 @@ module.exports = {
} }
] ]
}, },
target: 'node' // Specify the target environment as Node.js target: 'node'
}; };