vscode-q
This plugin is put into maintenance mode, which means I will not do any active development for it. All new features will be implemented for vscode-k-pro.
This extension provides 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.
Demo
Introduction to vscode-q
Configuration
- 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 Settings
and 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 |
q Language Server(local server, no connection to the internet)
The server will analyze q source files in all 'src' folder. Insert ';' to indicated end of statement if necessary.
Notebook
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
Server List
List servers, click to switch server. Generate tree structure from tags.
Special tag color:
- green: dev, development
- blue: uat
- red: prd, prod.
Discovery Server
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.
Server Explorer
List variables defined on the active server.
Query Mode
Type ctrl+shift+p and call kdb+/q ext: Switch Query Mode
to switch Query Console.
Query View
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.
Query Grid
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.
Query Console(default)
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.
History View
Record query histories.
Commands
Connect q Sever
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.
Shortcuts
- 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+".
Version Compatibility
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
Tips
- 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.
Disable Word Wrap in q Console of Output
Type ctrl+shift+p, call Open Setting(Json)
, and add following configuration.
"[Log]": {
"editor.wordWrap": "off"
}
No Color in q Output
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.
Customized Authentication
refer to vscode-q-auth
Packages
Special thanks to the following packages.
Reference
Recommended Packages
Contributing
If you'd like to contribute to this extension, please read the contributing guidelines.
License
GPL-3.0 license