mirror of
https://github.com/jlengrand/elm-language-client-vscode.git
synced 2026-03-10 08:11:17 +00:00
Add prettier and update folding provider
This commit is contained in:
1
.prettierrc.yaml
Normal file
1
.prettierrc.yaml
Normal file
@@ -0,0 +1 @@
|
||||
trailingComma: "all"
|
||||
7
.vscode/tasks.json
vendored
7
.vscode/tasks.json
vendored
@@ -28,6 +28,13 @@
|
||||
"problemMatcher": [
|
||||
"$tsc-watch"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "npm",
|
||||
"script": "lint",
|
||||
"problemMatcher": [
|
||||
"$tslint5"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
51
package-lock.json
generated
51
package-lock.json
generated
@@ -155,6 +155,16 @@
|
||||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
|
||||
"dev": true
|
||||
},
|
||||
"eslint-plugin-prettier": {
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz",
|
||||
"integrity": "sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fast-diff": "^1.1.1",
|
||||
"jest-docblock": "^21.0.0"
|
||||
}
|
||||
},
|
||||
"esprima": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
|
||||
@@ -167,6 +177,12 @@
|
||||
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
|
||||
"dev": true
|
||||
},
|
||||
"fast-diff": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
|
||||
"integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
|
||||
"dev": true
|
||||
},
|
||||
"fs.realpath": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||
@@ -218,6 +234,12 @@
|
||||
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
|
||||
"dev": true
|
||||
},
|
||||
"jest-docblock": {
|
||||
"version": "21.2.0",
|
||||
"resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz",
|
||||
"integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==",
|
||||
"dev": true
|
||||
},
|
||||
"js-tokens": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
|
||||
@@ -234,6 +256,12 @@
|
||||
"esprima": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"lines-and-columns": {
|
||||
"version": "1.1.6",
|
||||
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
|
||||
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
|
||||
"dev": true
|
||||
},
|
||||
"minimatch": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||
@@ -279,6 +307,12 @@
|
||||
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
|
||||
"dev": true
|
||||
},
|
||||
"prettier": {
|
||||
"version": "1.16.4",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz",
|
||||
"integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==",
|
||||
"dev": true
|
||||
},
|
||||
"resolve": {
|
||||
"version": "1.10.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
|
||||
@@ -342,6 +376,23 @@
|
||||
"tsutils": "^2.29.0"
|
||||
}
|
||||
},
|
||||
"tslint-config-prettier": {
|
||||
"version": "1.18.0",
|
||||
"resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz",
|
||||
"integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==",
|
||||
"dev": true
|
||||
},
|
||||
"tslint-plugin-prettier": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/tslint-plugin-prettier/-/tslint-plugin-prettier-2.0.1.tgz",
|
||||
"integrity": "sha512-4FX9JIx/1rKHIPJNfMb+ooX1gPk5Vg3vNi7+dyFYpLO+O57F4g+b/fo1+W/G0SUOkBLHB/YKScxjX/P+7ZT/Tw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"eslint-plugin-prettier": "^2.2.0",
|
||||
"lines-and-columns": "^1.1.6",
|
||||
"tslib": "^1.7.1"
|
||||
}
|
||||
},
|
||||
"tsutils": {
|
||||
"version": "2.29.0",
|
||||
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
|
||||
|
||||
@@ -77,12 +77,16 @@
|
||||
"compile": "tsc -b",
|
||||
"watch": "tsc -b -w",
|
||||
"postinstall": "cd client && npm install && cd ../server && npm install && cd ..",
|
||||
"test": "sh ./scripts/e2e.sh"
|
||||
"test": "sh ./scripts/e2e.sh",
|
||||
"lint": "tslint -p tsconfig.json"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/mocha": "^5.2.6",
|
||||
"@types/node": "^11.13.4",
|
||||
"prettier": "^1.16.4",
|
||||
"tslint": "^5.15.0",
|
||||
"tslint-config-prettier": "^1.18.0",
|
||||
"tslint-plugin-prettier": "^2.0.1",
|
||||
"typescript": "3.4.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,13 +48,11 @@ export class ElmMakeDiagnostics {
|
||||
} else {
|
||||
make = cp.spawn(makeCommand, args, { cwd });
|
||||
}
|
||||
// output is actually optional
|
||||
// (fixed in https://github.com/Microsoft/vscode/commit/b4917afe9bdee0e9e67f4094e764f6a72a997c70,
|
||||
// but unreleased at this time)
|
||||
|
||||
if (!make.stderr) { return; }
|
||||
const errorLinesFromElmMake: readline.ReadLine = readline.createInterface(
|
||||
{
|
||||
input: make.stderr,
|
||||
output: undefined,
|
||||
},
|
||||
);
|
||||
const lines: IElmIssue[] = [];
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
import { SyntaxNode, Tree } from "tree-sitter";
|
||||
import { FoldingRange, FoldingRangeKind, FoldingRangeRequest,
|
||||
FoldingRangeRequestParam, IConnection } from "vscode-languageserver";
|
||||
import {
|
||||
FoldingRange,
|
||||
FoldingRangeKind,
|
||||
FoldingRangeRequest,
|
||||
FoldingRangeRequestParam,
|
||||
IConnection
|
||||
} from "vscode-languageserver";
|
||||
import { IForest } from "../forest";
|
||||
|
||||
export class FoldingRangeProvider {
|
||||
@@ -10,31 +15,42 @@ export class FoldingRangeProvider {
|
||||
"if",
|
||||
"case",
|
||||
"func_statement",
|
||||
"block_comment",
|
||||
"record_type",
|
||||
"record_expr"
|
||||
]);
|
||||
|
||||
constructor(connection: IConnection, forest: IForest) {
|
||||
this.connection = connection;
|
||||
this.forest = forest;
|
||||
|
||||
this.connection.onRequest(FoldingRangeRequest.type, this.handleFoldingRange);
|
||||
this.connection.onRequest(
|
||||
FoldingRangeRequest.type,
|
||||
this.handleFoldingRange
|
||||
);
|
||||
}
|
||||
|
||||
protected handleFoldingRange = async (
|
||||
param: FoldingRangeRequestParam,
|
||||
param: FoldingRangeRequestParam
|
||||
): Promise<FoldingRange[]> => {
|
||||
const folds: FoldingRange[] = [];
|
||||
|
||||
const tree: Tree | undefined = this.forest.getTree(param.textDocument.uri);
|
||||
|
||||
const traverse: (node: SyntaxNode) => void = (node: SyntaxNode): void => {
|
||||
if (node.parent && node.parent.lastChild && !node.isNamed && this.FOLD_CONSTRUCTS.has(node.type)) {
|
||||
if (
|
||||
node.parent &&
|
||||
node.parent.lastChild &&
|
||||
!node.isNamed &&
|
||||
this.FOLD_CONSTRUCTS.has(node.type)
|
||||
) {
|
||||
const endNode: SyntaxNode = node.parent.lastChild;
|
||||
folds.push({
|
||||
endCharacter: node.endPosition.column,
|
||||
endLine: endNode.endPosition.row,
|
||||
kind: FoldingRangeKind.Region,
|
||||
startCharacter: node.startPosition.column,
|
||||
startLine: node.startPosition.row,
|
||||
startLine: node.startPosition.row
|
||||
});
|
||||
}
|
||||
for (const childNode of node.children) {
|
||||
@@ -46,5 +62,5 @@ export class FoldingRangeProvider {
|
||||
}
|
||||
|
||||
return folds;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -41,14 +41,9 @@ export function execCmd(
|
||||
cmd: string,
|
||||
options: IExecCmdOptions = {},
|
||||
elmRootPath: URI,
|
||||
connection: IConnection,
|
||||
connection: IConnection
|
||||
): IExecutingCmd {
|
||||
const {
|
||||
onStart,
|
||||
onStdout,
|
||||
onStderr,
|
||||
onExit,
|
||||
} = options;
|
||||
const { onStart, onStdout, onStderr, onExit } = options;
|
||||
let childProcess: cp.ChildProcess;
|
||||
let firstResponse = true;
|
||||
let wasKilledbyUs = false;
|
||||
@@ -57,7 +52,15 @@ export function execCmd(
|
||||
const cmdArguments = options ? options.cmdArguments : [];
|
||||
|
||||
const fullCommand = cmd + " " + (cmdArguments || []).join(" ");
|
||||
childProcess = cp.exec(fullCommand, { cwd: elmRootPath.fsPath }, handleExit);
|
||||
childProcess = cp.exec(
|
||||
fullCommand,
|
||||
{ cwd: elmRootPath.fsPath },
|
||||
handleExit
|
||||
);
|
||||
|
||||
if (!childProcess.stdout) {
|
||||
return;
|
||||
}
|
||||
|
||||
childProcess.stdout.on("data", (data: Buffer) => {
|
||||
if (firstResponse && onStart) {
|
||||
@@ -69,6 +72,9 @@ export function execCmd(
|
||||
}
|
||||
});
|
||||
|
||||
if (!childProcess.stderr) {
|
||||
return;
|
||||
}
|
||||
childProcess.stderr.on("data", (data: Buffer) => {
|
||||
if (firstResponse && onStart) {
|
||||
onStart();
|
||||
@@ -79,7 +85,11 @@ export function execCmd(
|
||||
}
|
||||
});
|
||||
|
||||
function handleExit(error: cp.ExecException | null, stdout: string | Buffer, stderr: string | Buffer) {
|
||||
function handleExit(
|
||||
error: cp.ExecException | null,
|
||||
stdout: string | Buffer,
|
||||
stderr: string | Buffer
|
||||
) {
|
||||
IexecutingCmd.isRunning = false;
|
||||
if (onExit) {
|
||||
onExit();
|
||||
@@ -97,7 +107,7 @@ export function execCmd(
|
||||
if (cmdWasNotFound) {
|
||||
const notFoundText = options ? options.notFoundText : "";
|
||||
connection.window.showErrorMessage(
|
||||
`${cmdName} is not available in your path. ` + notFoundText,
|
||||
`${cmdName} is not available in your path. ` + notFoundText
|
||||
);
|
||||
} else {
|
||||
connection.window.showErrorMessage(error.message);
|
||||
|
||||
10
tslint.json
10
tslint.json
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"defaultSeverity": "error",
|
||||
"extends": [
|
||||
"tslint:recommended"
|
||||
],
|
||||
"extends": ["tslint:recommended", "tslint-config-prettier"],
|
||||
"jsRules": {},
|
||||
"rules": {},
|
||||
"rulesDirectory": []
|
||||
"rules": {
|
||||
"prettier": true
|
||||
},
|
||||
"rulesDirectory": ["tslint-plugin-prettier"]
|
||||
}
|
||||
Reference in New Issue
Block a user