[mlir] Add a vscode language extension for MLIR

This utilizes the mlir-lsp server to provide language services for MLIR files opened in vscode. The extension currently supports syntax highlighting, as well as tracking definitions/uses/source locations for SSA values and blocks.

Differential Revision: https://reviews.llvm.org/D100607
This commit is contained in:
River Riddle 2021-04-21 14:33:18 -07:00
parent 751c14fc42
commit b810e3a552
9 changed files with 2507 additions and 0 deletions

7
mlir/utils/vscode/.gitignore vendored Normal file
View File

@ -0,0 +1,7 @@
out
node_modules
.vscode-test
*.vsix
grammar.json
!.vscode

24
mlir/utils/vscode/.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,24 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "extensionHost",
"request": "launch",
"name": "Run Extension",
"runtimeExecutable": "${execPath}",
"args": [
"--extensionDevelopmentPath=${workspaceRoot}"
],
"outFiles": [
"${workspaceRoot}/out/**/*.js"
],
"preLaunchTask": {
"type": "npm",
"script": "watch"
}
}
]
}

33
mlir/utils/vscode/.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,33 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "npm",
"script": "compile",
"group": "build",
"presentation": {
"panel": "dedicated",
"reveal": "never"
},
"problemMatcher": [
"$tsc"
]
},
{
"type": "npm",
"script": "watch",
"isBackground": true,
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"panel": "dedicated",
"reveal": "never"
},
"problemMatcher": [
"$tsc-watch"
]
}
]
}

View File

@ -0,0 +1,4 @@
.vscode/**
.vscode-test/**
.gitignore
vsc-extension-quickstart.md

View File

@ -0,0 +1,22 @@
{
"comments": {
"lineComment": "//"
},
"brackets": [
["{", "}"],
["[", "]"],
["(", ")"]
],
"autoClosingPairs": [
["{", "}"],
["[", "]"],
["(", ")"],
["\"", "\""]
],
"surroundingPairs": [
["{", "}"],
["[", "]"],
["(", ")"],
["\"", "\""]
]
}

2275
mlir/utils/vscode/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,70 @@
{
"name": "mlir",
"displayName": "MLIR",
"description": "MLIR Language Extension",
"version": "0.0.1",
"publisher": "llvm-vs-code-extensions",
"repository": "https://github.com/llvm/llvm-project/",
"engines": {
"vscode": "^1.52.0"
},
"categories": [
"Programming Languages"
],
"activationEvents": [
"onLanguage:mlir"
],
"main": "./out/extension",
"contributes": {
"languages": [
{
"id": "mlir",
"aliases": [
"MLIR",
"mlir"
],
"extensions": [
".mlir"
],
"configuration": "./language-configuration.json"
}
],
"grammars": [
{
"language": "mlir",
"scopeName": "source.mlir",
"path": "./grammar.json"
}
],
"configuration": {
"type": "object",
"title": "MLIR",
"properties": {
"mlir.server_path": {
"scope": "resource",
"type": "string",
"description": "The file path of the mlir-lsp-server executable."
}
}
}
},
"scripts": {
"vscode:prepublish": "tsc -p ./",
"compile": "tsc -watch -p ./",
"format": "clang-format -i --glob=\"{src,test}/*.ts\"",
"test": "tsc -p ./ && node ./out/test/index.js",
"package": "vsce package"
},
"devDependencies": {
"@types/mocha": "^5.2.0",
"@types/node": "^8.0.0",
"@types/vscode": "1.52.*",
"clang-format": "1.4.0",
"tslint": "^5.16.0",
"typescript": "^3.5.1",
"vsce": "^1.75.0",
"vscode-languageclient": "^5.2.1",
"vscode-test": "^1.3.0"
},
"dependencies": {}
}

View File

@ -0,0 +1,56 @@
import * as vscode from 'vscode';
import * as vscodelc from 'vscode-languageclient';
let client: vscodelc.LanguageClient;
/**
* This method is called when the extension is activated. The extension is
* activated the very first time a command is executed.
*/
export function activate(context: vscode.ExtensionContext) {
// Get the path of the mlir-lsp-server that is used to provide language
// functionality.
const config = vscode.workspace.getConfiguration('mlir');
const userDefinedServerPath = config.get<string>('server_path');
const serverPath = (userDefinedServerPath === '') ? 'mlir-lsp-server'
: userDefinedServerPath;
// Configure the server options.
const serverOptions: vscodelc.ServerOptions = {
run : {
command : serverPath,
transport : vscodelc.TransportKind.stdio,
args : []
},
debug : {
command : serverPath,
transport : vscodelc.TransportKind.stdio,
args : []
}
};
// Configure the client options.
const clientOptions: vscodelc.LanguageClientOptions = {
documentSelector : [ {scheme : 'file', language : 'mlir'} ],
synchronize : {
// Notify the server about file changes to *.mlir files contained in the
// workspace.
fileEvents : vscode.workspace.createFileSystemWatcher('**/*.mlir')
}
};
// Create the language client and start the client.
client = new vscodelc.LanguageClient('mlir-lsp', 'MLIR Language Client',
serverOptions, clientOptions);
client.start();
}
/**
* This method is called when the extension is deactivated.
*/
export function deactivate(): Thenable<void>|undefined {
if (!client) {
return undefined;
}
return client.stop();
}

View File

@ -0,0 +1,16 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"outDir": "out",
"rootDir": "src",
"sourceMap": true
},
"include": [
"src"
],
"exclude": [
"node_modules",
".vscode-test"
]
}