A-Shell Language Extension README
A-Shell Language Mode Extension for VSCode.
Features
- Language mode for A-Shell
- Syntax highlighting
- Collapsible code sections
- Go To Definition (both for function calls and ++include)
- Dynamic scoping as files opened / closed; supports DevPPN & ersatz with ++include
- Hover cursor over token (keyword, variable, function, ...) to see definition
- Function signature help (pops up as parameters entered)
The language mode is automatically swapped to A-Shell for the following file extensions;
- .bas
- .bp
- .bpi
- .bsi
- .stru
- .map
- .max
- .bav
- .mav
- .r11
- .r10
- .lsx
- .lst
If a file extension is not covered in the above list, then you can manually enable the A-Shell language by clicking the Select Language Mode in the bottom of the screen. Or by using Command Palette > Change Language Mode.
Known Issues
- Labels (not functions) are not being recognised correctly and will not show/hide correctly
Release Notes
[1.3.2] - 13-Jul-26
- Fix problem with ashell.miameIniPath not being recognized (when miame.ini not in the root directory of the workspace).
[1.3.1] - 13-Jul-26
- Fixed
++include/$COPY resolution when the target's DEVICE= entry points at a UNC share (e.g. DEVICE=DSK43: "\\JACKX1\vm\miame\dsk43\").
[1.3.0] - 10-Jul-26
- Fixed annoyance with treating literal file channel references as color a color decorator
- Support the $COPY directive
- Support ++INCLUDE'IF'EXISTS
- Hitting the build command (Ctrl+Shift+B) from the context of include file that was accessed via a Go To Definition operation should now revert to compiling the main program. (This is mainly a convenience to deal with the common scenario where you compil a program, it reports errors in an include file, which you then Go To, fix, and hit Ctrl+Shift+B to re-compile. Aside from saving you the hassle of having to first figure out what happened, then click back on the main program and re-execute the build command, it also eliminates the accumulation of useless RUN and LSX files for include files.)
- Add tracing improvement. To activate, open the Command Palette (Ctrl+Shift+P) and click on the A-Shell: Toggle Language Server Tracing, after which there'll be a lot more stuff output to the Output panel when you open a file.
[1.2.2] - 09-Jul-26
- Packaging-only update: picks up manual edits to
readme.md,compiler/compil.ps1, and samples/demo.bas. No server/client code changes.
[1.2.1] - 08-Jul-26
- Fixed a bug in Signature Help
[1.2.0] - 07-Jul-26
- Go To Definition, Hover, Completion, Diagnostics, Folding, and Signature
Help added on top of the original syntax-highlighting-only extension, via
a real Language Server (
vscode-languageserver).
++include resolution via A-Shell's DEVICE/ERSATZ file system
(ashell.miameIniPath setting).
- Indexing scoped to the union of currently-open documents' own
++include
closures, not a whole-workspace scan -- a same-named declaration in an
unrelated file elsewhere in the workspace tree no longer shows up as a
spurious extra match, and indexing cost no longer scales with workspace
size. Check the "A-Shell Language Server" Output channel for
<uri> reaches N file(s) via ++include to verify this per file opened.
- Signature Help is now aware of ASB's named-parameter calling convention
(arguments in any order): typing
name= highlights that exact parameter
regardless of its declared position, and highlighting is suppressed
(rather than guessing the wrong "next" parameter) once a named argument
has already been used earlier in the same call.
- Toggle Marked Comment command (
ctrl+shift+1).
- Auto-indent on Enter for block constructs.
1.2.1 [Release from MicroSabio] - 05-Jul-26
- Support function signature dynamic help
- Support Ctrl+Shift+1 to toggle/comment marked lines (using "!>!")
1.2.0 - 05-Jul-26
- Add dynamic scoping (based on file opening/closing)
- Support Go To Definition
- Support Hover
1.1.0 - [MicroSabio Fork] - 04-Jul-26
- Add an LSP to the 1.0.4 extension (several iterations assistance by Claude/Sonnet 5)
- Train it with ashref.md June 30, 2026 version
1.0.4 [Update from OmniLedger]
1.0.3 [Release]
- Fixed collapsible sections for routines (labels)
- Fixed highlighting for file channels
- Fixed file associations, the list under features should now trigger the A-Shell language correctly
1.0.2
- Compilation PS script compil.ps1
- Comments to compil.ps1
- compil.ps1 can now handle directory references with spaces
1.0.1
- Improvement to the Regex for all keywords
- More methods
1.0.0
- Created basic functionality for the Syntax Highlighter using Text Grammars
- A large selection of basic keywords, methods and functions
Compiler
- Open an A-Shell Project Workspace. If you don't have one, open the the highest level folder above your files (e.g. c:\vm\miame), then use Save Workspace As to save it (e.g. asb-code).
- Create a folder aux-files beneath that folder.
- Download compil.ps1 from A-Shell Extension Release or https://www.microsabio.net/dist/other/vscode.
- Add to aux-files folder (e.g. c:\vm\miame\aux-files\compil.ps1**
- Open compil.ps1 and read the comments for configuration
- Download https://www.microsabio.net/dist/other/vscode/tasks.json and open it from a temp dir.
- Download https://www.microsabio.net/dist/70rel/bin-win/compil-7.0.1084-w32.zip (or higher).
You may be able to use an earlier version, but this is the first version that allows the
compiler to run without being logged into an A-Shell directory, which is helpful in the
VS Code environment. The default compil.ps1 expects compil.exe to be in c:\vm\apn but you
can move it anywhere.
- Open Tasks: Open User Tasks
- Add the following object to tasks.json (copy and paste from step 6 if desired)
{
"label": "A-Shell Compile",
"type": "shell",
"command": "${workspaceFolder}\\aux-files\\compil.ps1",
"args": [
"${file}",
"${workspaceFolder}"
],
"options": {
"cwd": ""
},
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"reveal": "always",
"revealProblems": "always",
"focus": false,
"echo": true,
"showReuseMessage": false,
"panel": "shared",
"clear": true
},
"problemMatcher": {
"owner": "ashell",
"fileLocation": [
"autoDetect",
"${fileDirname}"
],
"pattern": {
"regexp": "^(\\d+),(.+),(\\d+),(.+),(.+)$",
"file": 2,
"line": 3,
"column": 1,
"message": 4,
"code": 5
}
}
}
| |