This extension provides kdb+\q language support:
- q syntaxes
- q notebook(*.qnb)
- server list group by tags
- server explorer
- query grid powered by ag-grid-community & chart.js
- query visualization powered by perspective
- language server powered by tree-sitter
- rename symbol (F2)
- go to definition (F12)
- go to reference (Shift+F12)
- workspace symbol (Ctrl+T)
- document highlight
- document symbol (Ctrl+Shift+O)
- completion
- identifiers defined in code
- identifiers defined on kdb+ process
- column names define on kdb+ process
- completion resolve
- signature help
- semantic highlight
- call hierarchy
See the change log.
- To configure globally, type ctrl+, to open Settings and change the following values.
- To configure for workspace, type ctrl+shift+p, call
Preferences: Open Workspace Settingsand change the following values.
| configuration | type | default value | description |
|---|---|---|---|
| q-server.sourceFiles.globsPattern | array | ["**/src/**/*.q"] |
source folder to be included |
| q-server.sourceFiles.ignorePattern | array | ["**/build","**/node_modules"] |
folder to be excluded |
| q-client.queryMode | string | Console |
query mode, Console, Grid or Visualization |
| q-client.queryGrid.decimals | number | 3 |
decimals in q grid |
| q-client.term.qBinary | string | q |
q executable file or full path |
| q-client.term.envPath | string | '' |
environment file relative or absolute path |
| q-client.expl.prevQueryLimit | string | 5 |
q explorer preview query limit |
| q-client.expl.autoRefresh | boolean | false |
q explorer auto refresh |
| q-client.expl.excludedNamespaces | array | ["q","Q","j","o","h"] |
namespaced to be excluded from q explorer |
| q-client.output.autoClear | boolean | false |
Auto Clear Output |
| q-client.output.includeQuery | boolean | false |
Include Query in Output |
| q-client.output.consoleSize | string | '36 180' |
Console Size for Output |
The server will analyze q source files in all 'src' folder. Insert ';' to indicated end of statement if necessary.
Files with postfix *.qnb are using notebook feature. There are 2 output mode for q notebook, switch to following query mode for different output format
- q Console -> notebook console
- q Grid -> notebook html
- q Visualization -> notebook html
List servers, click to switch server. Generate tree structure from tags.
Special tag color:
- green: dev, development
- blue: uat
- red: prd, prod.
The url should be a REST API endpoint, which returns a list of {host:string, port:number, label:string}. The returned list will be added to Server List, but it won't be saved.
List variables defined on the active server.
Type ctrl+shift+p and call kdb+/q ext: Switch Query Mode to switch Query Console.
The query view, powered by perspective, can pivot and virtualize table data. In Query View mode, only table will be showed in a webview, but other result will still be in output. It will limit to 1000 rows when query a table, click the flame in q Ext panel , or call kdb+/q ext: Toggle Unlimited Query, to remove 1000 rows limit. Be noted that, Query View only support millisecond precision. Use Query Grid, if you need nanosecond precision.
The query grid, powered by ag-grid-community and chart.js, can filter and sort table data. In Query Grid mode, only table will be showed in a webview, but other result will still be in output. It will limit to 1000 rows when query a table, click the flame in q Ext panel , or call kdb+/q ext: Toggle Unlimited Query, to remove 1000 rows limit.
Output just like q console to an output channel. The console size is set to the same as q http size. Use system "C rows columns" to change console size.
Record query histories.
Type ctrl+shift+p and call kdb+/q ext: Connect to q Server to connect to a q server.
Append space to },],) by formatting the file. Turn on Editor: Format On Save to automatically append space.
- ctrl+q: query current line
- ctrl+r: query selection
- ctrl+e: query block
- ctrl+shift+q: send current line to terminal
- ctrl+shift+r: send selection to terminal
- ctrl+shift+e: send block to terminal
To change shortcuts
- type ctrl+shift+p
- input "shortcut"
- open the Keyboard Shortcuts
- search for "kdb+".
To use this extension in an earlier version of vscode.
- git clone this repo
- change 'vscode' of 'engine' in the package.json and '@types/vscode' of devDependencies to target version 1.**
...
"engines": {
"vscode": "^1.**.*"
},
...
"devDependencies": {
...
"@types/vscode": "^1.**.*",
...
},
- run the following commands from this repo folder to get a earlier version compatible package
npm i
sudo npm i -g vsce
vsce package
- Type ctrl+comma(,), open Settings, disable
Output>Smart Scroll. - Turn on Auto Scrolling by clicking a small locker icon on the right top of output channel.
Type ctrl+shift+p, call Open Setting(Json), and add following configuration.
"[Log]": {
"editor.wordWrap": "off"
}
There may be a conflict with other extensions. Disable or uninstall them and try again.
Type ctrl+shift+p, call Open Setting(Json), and add following configuration.
"editor.tokenColorCustomizations": {
"textMateRules": [
{
"scope":"comment.line.attention",
"settings": {
"fontStyle": "italic",
"foreground": "#B71C1C"
}
},
{
"scope":"comment.line.todo",
"settings": {
"fontStyle": "italic",
"foreground": "#2E7D32"
}
}
]
}
Querying comment line /<=> quant,prod,local-1800 will connect to quant,prod,local-1800.
Type ctrl+shift+p, call kdb+/q ext Insert Active Connection Label to insert active connection label.
refer to vscode-q-auth
Special thanks to the following packages.
- https://github.com/simongarland/vim
- https://github.com/quintanar401/language-kdb-q
- https://github.com/tree-sitter/tree-sitter-javascript
- https://github.com/bash-lsp/bash-language-server
- https://github.com/RandomFractals/vscode-data-preview
If you'd like to contribute to this extension, please read the contributing guidelines.


