How-To Install 🧩
- Download here
- Drop the VSIX file on VSCode
Extension ◳ side-panel
✈️ Other Airbus-Recommended Extensions
⚠️ Always install from trusted (☑️) publisher
Features
Click on the ➤ for details:
🧭 NPL Languages Navigation via Ctrl+Click
In addition to Syntax Highlighting, Symbols are indexed to offer
[!TIP]
You can re-index anytime from the status bar {} icon
Ctrl + Click Navigation between declaration/implementation

- Callgraph by REQ/Service/Global in DCSL

- Dependency Graph for CoDDa machine

- Symbol Outline (in
Explorer tab)

This Feature can also be used via a code-cli alias (see definition in the "Command line interface" chapter)
code-cli npl.language.parse codda > ast.json
code-cli npl.language.parse codda | jq '.[].entries[].name'
code-cli npl.language.parse codda graph | jq -r | dot -Tpdf
💭 Tracability/Languages Tooltip via Mouse-over
Symbols indexing can also offer quick overview on a Symbol or Requirement

📊 XLSM - JSON bi-directional converter
Collaborate, Merge and resolve tracability matrixes in a more textual diff-friendly format

You can also convert to/from JSON-folder if you prefere a per-documents JSON file structure.
This Feature can also be used by git (without vscode) to display diff between 2 XLSM.
To setup, declare in $HOME/.gitconfig:
[diff "excel"]
binary = true
textconv = /home/dpmgr/tools/QJS/qjs --std $HOME/.vscode-server/extensions/airbus-avionics-software.npl-*/cli.js npl.xlsm.parse
and in your project .gitattributes :
*.xlsm diff=excel
*.xlsx diff=excel
This Feature can also be used via a code-cli alias (see it declaration in the "Command line interface" chapter)
code-cli npl.xlsm.parse /path/to/src/spec/C01234_RAM-HLR.xlsm > RAM-HLR.json
code-cli npl.xlsm.parse /path/to/src/spec/C01234_RAM-HLR.xlsm | jq .matrix[].Text
code-cli npl.xlsm.toFolder /path/to/src/spec/C01234_RAM-HLR.xlsm
code-cli npl.xlsm.fromFolder /path/to/src/spec/C01234_RAM-HLR/
code-cli npl.prf.update /path/to/src/spec/C01234_RAM-HLR.xlsm
This alias can also be used to display/compare XLSM from various sources/branches:
# get the file from "master" ref
git show master:src/spec/C00048_RAM-HLR.xlsm > tmp.xlsm
# show the diff using vimdiff
vimdiff <(code-cli npl.xlsm.parse tmp.xlsm) <(code-cli npl.xlsm.parse src/spec/C00048_RAM-HLR.xlsm)
# bonus: use sed to trim trailing \n
vimdiff <(code-cli npl.xlsm.parse tmp.xlsm | sed 's/ *\\n *"/"/') <(code-cli npl.xlsm.parse src/spec/C00048_RAM-HLR.xlsm | sed 's/ *\\n *"/"/')
[!CAUTION]
XLSM to JSON do not preserve style/color.
XLSM to JSON do not modify cells values, so trailling whitespace are kept, but Excel trim them uppon XLSM save.
[!WARNING]
This extension do not offer JSON spreadsheet editor, since Excel (or this VSCode extension) can already edit XLSM-converted JSON.
[!NOTE]
You can replace XLSM with JSON in your git tree for easier workflow,
but XLSM are still the official format for publish and reqtify input/output
📜 JSON (ConfGen, RAM ...) Validator & Helper via JSON Schemas
Schemas found in /external/ are automatically enforced to ConfGen*.json files.
If none have been found (for example if no /external/ existed when VSCode started),
you can manually reload from the status bar {} icon.

You can benefit from automatic validation, autocompletion, value check, ...

Thanks to JSON Schema, REQ engineering rules can by applied to CRAM/RAM/DRAM JSON files to detect rules violation, bad attributes ...

🐛 TITV debug via ms-vscode.cpptools (1.23.4) GDB integration
This allows to connect VSCode to the running BSWtool GDB for inline code steppin, variable details, stackTrace, assembly view and much more

📚 Review Database Generation/Refresh
Hash all requirements from a *RAM*.xlsm file (and optionaly /src/verif/integration/* files) into a sqar/prf/*.reqs.json database file.
If the destination *.reqs.json already exist:
- Created XLSM REQs are append to the JSON
- Updated XLSM REQs are refreshed in the
currentHash JSON field (other fields are kept untouched)
- Deleted XLSM REQs are deleted from JSON
[!NOTE]
Generated Database support bidirectional JSON<->XLSM convert, so you can edit it with Excel

🔒 Safe Artifactory Authentication via Gradle Environment
Gradle can read project values from Environment variables (examples: ORG_GRADLE_PROJECT_artifactory_password) instead of .gradle/gradle.properties file.
This allows to have password-less gradle.properties since VSCode can forward them on its terminal from it SecretStorage.

[!WARNING]
This forwarding method shall be adapted to your other clients (MobaXTerm, 'ssh', ...)
if you want them to work on artifactory-dependant build steps (f_o_i ...).
🔍 JSON manipulation/query via JQ
Using JQ, you can query/edit any current JSON file attribute using the 🔍 top menu icon:

The query result can be injected back into the JSON file, using the top "replace" button (next to the x "close" button).
You can then, add this query snippets to the list of pre-configured 🛠️ npl.jqSnippets to be displayed as grey menu in the editor.

JQ Tips : merge a .userdata.json + .cpntdata.json into .matrix.json:
jq --argfile user src/spec/C00119_RAM-HLR/AD.userdata.json '. as $current | ([$user|paths] - [$current|paths]) as $new | reduce $new[] as $p ($current; setpath($p; $user|getpath($p))) ' src/spec/C00119_RAM-HLR/AD.cpntdata.json > src/spec/C00119_RAM-HLR/AD.matrix.json
🔗 Jira Auto-Links
Offer clickable jira link from any output in the terminal

Note: This won't make other extension (ex: gitlens) commit link clickable.
Refere to your extension documentation. Here is an example to enable autolick for gitlens extension:
"gitlens.autolinks": [
{ "prefix": "C00215-", "url": "https://cisas.eu.airbus.corp:8343/1V32_jira/browse/C00215-<num>" },
{ "prefix": "C00216-", "url": "https://cisas.eu.airbus.corp:8343/1V32_jira/browse/C00216-<num>" }
]
🛠️ Fully Configurable via GUI
All features can be customized to your needs. Use the Extension > Extension settings menu.

🔁 Always Up-to-date via Jenkins
All commits are built and deployed so that users will be notified to all users at VSCode boot.
This ensure up-to-date error-reporting. Note that you can also manualy check from update from the extension menu:

💻 Command line interface via QJS
Using the QuickJS engine,
you can run the cli.js wrapper to execute some VSCode command without VSCode.
Simply define this alias in your .kshrc or .bashrc or .zshrc profile file:
declare NPL=$(echo $HOME/.vscode-server/extensions/airbus-avionics-software.npl-*|awk '{print $1;}')
alias code-cli="/home/dpmgr/tools/QJS/qjs --std $NPL/cli.js"
Source this profile file and the following command shall now list all possible actions:
code-cli
🤖 On-premise AI assistant
Using the Llama.cpp LLM inference engine,
you can ask via the 🤖NPL AI status icon or via the 💡 editor icon on the left side.
Use vscode lm API, which currently vendor-locked once available.

Need something more ? Request a feature
Contribute
To debug or contribute to this project:
- Clone and open this repos in VSCode
- Open any
.js/.mjs file (e.g. extension/main.js)
- In top vscode menu select :
Run > Debug > VSCode Extension
- A new window with your current code will open
- Don't hesitate to add breakpoint and use the debug console (first window)