We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
2 parents 4e4ac92 + 1e3d55c commit f4eeb12Copy full SHA for f4eeb12
server/CHANGELOG.md
@@ -1,5 +1,10 @@
1
# Bash Language Server
2
3
+## 1.5.3
4
+
5
+* Support for showing warning for missing nodes
6
+* Upgrade `tree-sitter-bash` to `0.13.3`
7
8
## 1.5.2
9
10
* Upgrade `tree-sitter` to `0.13.5` and `tree-sitter-bash` to `0.13.2`
server/package.json
@@ -3,7 +3,7 @@
"description": "A language server for Bash",
"author": "Mads Hartmann",
"license": "MIT",
- "version": "1.5.2",
+ "version": "1.5.3",
"publisher": "mads-hartmann",
"main": "out/server.js",
"bin": {
@@ -21,7 +21,7 @@
21
"request": "^2.83.0",
22
"request-promise-native": "^1.0.5",
23
"tree-sitter": "^0.13.5",
24
- "tree-sitter-bash": "^0.13.2",
+ "tree-sitter-bash": "^0.13.3",
25
"turndown": "^4.0.2",
26
"urijs": "^1.19.1",
27
"vscode-languageserver": "^4.1.1"
server/src/__tests__/__snapshots__/analyzer.test.ts.snap
@@ -1,6 +1,25 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
-exports[`analyze returns a list of errors for a file with errors 1`] = `
+exports[`analyze returns a list of errors for a file with a missing node 1`] = `
+Array [
+ Object {
+ "message": "Syntax error: expected \\"fi\\" somewhere in the file",
+ "range": Object {
+ "end": Object {
+ "character": 0,
+ "line": 12,
11
+ },
12
+ "start": Object {
13
14
15
16
17
+ "severity": 2,
18
19
+]
20
+`;
+exports[`analyze returns a list of errors for a file with parsing errors 1`] = `
Array [
Object {
"message": "Failed to parse expression",
server/src/__tests__/analyzer.test.ts
@@ -9,12 +9,18 @@ beforeEach(() => {
})
describe('analyze', () => {
- it('returns an empty list for a file with no errors', () => {
+ it('returns an empty list of errors for a file with no parsing errors', () => {
const result = analyzer.analyze(CURRENT_URI, FIXTURES.INSTALL)
expect(result).toEqual([])
- it('returns a list of errors for a file with errors', () => {
+ it('returns a list of errors for a file with a missing node', () => {
+ const result = analyzer.analyze(CURRENT_URI, FIXTURES.MISSING_NODE)
+ expect(result).not.toEqual([])
+ expect(result).toMatchSnapshot()
+ })
+ it('returns a list of errors for a file with parsing errors', () => {
const result = analyzer.analyze(CURRENT_URI, FIXTURES.PARSE_PROBLEMS)
expect(result).not.toEqual([])
expect(result).toMatchSnapshot()
server/src/analyser.ts
@@ -241,7 +241,7 @@ export default class Analyzer {
241
242
const problems = []
243
244
- TreeSitterUtil.forEach(tree.rootNode, n => {
+ TreeSitterUtil.forEach(tree.rootNode, (n: Parser.SyntaxNode) => {
245
if (n.type === 'ERROR') {
246
problems.push(
247
LSP.Diagnostic.create(
@@ -277,6 +277,22 @@ export default class Analyzer {
277
}
278
279
280
+ function findMissingNodes(node: Parser.SyntaxNode) {
281
+ if (node.isMissing()) {
282
+ problems.push(
283
+ LSP.Diagnostic.create(
284
+ TreeSitterUtil.range(node),
285
+ `Syntax error: expected "${node.type}" somewhere in the file`,
286
+ LSP.DiagnosticSeverity.Warning,
287
+ ),
288
+ )
289
+ } else if (node.hasError()) {
290
+ node.children.forEach(findMissingNodes)
291
+ }
292
293
294
+ findMissingNodes(tree.rootNode)
295
296
return problems
297
298
server/yarn.lock
@@ -839,9 +839,9 @@ tr46@^1.0.1:
839
dependencies:
840
punycode "^2.1.0"
841
842
-tree-sitter-bash@^0.13.2:
843
- version "0.13.2"
844
- resolved "https://registry.yarnpkg.com/tree-sitter-bash/-/tree-sitter-bash-0.13.2.tgz#e3a0b049df7edf0bea74b8bf58f29241e3c73463"
+tree-sitter-bash@^0.13.3:
+ version "0.13.3"
+ resolved "https://registry.yarnpkg.com/tree-sitter-bash/-/tree-sitter-bash-0.13.3.tgz#b9d3bebb0ff9ddc3692b2a96a02872beef5af53f"
845
846
nan "^2.10.0"
847
prebuild-install "^5.0.0"
testing/fixtures.ts
@@ -4,9 +4,14 @@ import * as LSP from 'vscode-languageserver'
const base = path.join(__dirname, './fixtures/')
+function getFixture(filename: string) {
+ return LSP.TextDocument.create('foo', 'bar', 0, fs.readFileSync(path.join(base, filename), 'utf8'))
+}
const FIXTURES = {
- INSTALL: LSP.TextDocument.create('foo', 'bar', 0, fs.readFileSync(path.join(base, 'install.sh'), 'utf8')),
- PARSE_PROBLEMS: LSP.TextDocument.create('foo', 'bar', 0, fs.readFileSync(path.join(base, 'parse-problems.sh'), 'utf8')),
+ MISSING_NODE: getFixture('missing-node.sh'),
+ INSTALL: getFixture('install.sh'),
+ PARSE_PROBLEMS: getFixture('parse-problems.sh'),
export default FIXTURES
testing/fixtures/missing-node.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+# set -x
+set -e
+PATH_INPUT=src/in.js
+PATH_OUTPUT=src/out.js
+if [[ $PATH_INPUT -nt $PATH_OUTPUT ]]; then
+ babel --compact false ${PATH_INPUT} > ${PATH_OUTPUT}
+f
+echo "test"
vscode-client/src/extension.ts
@@ -10,7 +10,7 @@ import {
import { getServerInfo } from './util'
-const MINIMUM_SERVER_VERSION = '1.3.0'
+const MINIMUM_SERVER_VERSION = '1.5.2'
export async function activate(context: ExtensionContext) {
try {
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル
0 commit comments