support @ts-expect-error directive on tsserver v390
This commit is contained in:
parent
ef22359a1b
commit
92891a3096
2 changed files with 67 additions and 53 deletions
|
@ -2,18 +2,18 @@
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import { CancellationToken, CompletionContext, CompletionItem, CompletionItemKind, CompletionList, Position, Range } from 'vscode-languageserver-protocol'
|
import { CancellationToken, CompletionContext, CompletionItem, CompletionItemKind, CompletionList, Position, Range } from 'vscode-languageserver-protocol'
|
||||||
import { TextDocument } from 'vscode-languageserver-textdocument'
|
import { TextDocument } from 'vscode-languageserver-textdocument'
|
||||||
import { workspace } from 'coc.nvim'
|
import { workspace } from 'coc.nvim'
|
||||||
import { ITypeScriptServiceClient } from '../typescriptService'
|
import { ITypeScriptServiceClient } from '../typescriptService'
|
||||||
|
import API from '../utils/api'
|
||||||
|
|
||||||
interface Directive {
|
interface Directive {
|
||||||
readonly value: string
|
readonly value: string
|
||||||
readonly description: string
|
readonly description: string
|
||||||
}
|
}
|
||||||
|
|
||||||
const directives: Directive[] = [
|
const tsDirectives: Directive[] = [
|
||||||
{
|
{
|
||||||
value: '@ts-check',
|
value: '@ts-check',
|
||||||
description: 'Enables semantic checking in a JavaScript file. Must be at the top of a file.'
|
description: 'Enables semantic checking in a JavaScript file. Must be at the top of a file.'
|
||||||
|
@ -28,6 +28,14 @@ const directives: Directive[] = [
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
const tsDirectives390: Directive[] = [
|
||||||
|
...tsDirectives,
|
||||||
|
{
|
||||||
|
value: '@ts-expect-error',
|
||||||
|
description: 'Suppresses @ts-check errors on the next line of a file, expecting at least one to exist.'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
export default class DirectiveCommentCompletionProvider {
|
export default class DirectiveCommentCompletionProvider {
|
||||||
constructor(private readonly client: ITypeScriptServiceClient) { }
|
constructor(private readonly client: ITypeScriptServiceClient) { }
|
||||||
|
|
||||||
|
@ -50,6 +58,9 @@ export default class DirectiveCommentCompletionProvider {
|
||||||
const prefix = line.slice(0, position.character)
|
const prefix = line.slice(0, position.character)
|
||||||
const match = prefix.match(/^\s*\/\/+\s?(@[a-zA-Z\-]*)?$/)
|
const match = prefix.match(/^\s*\/\/+\s?(@[a-zA-Z\-]*)?$/)
|
||||||
if (match) {
|
if (match) {
|
||||||
|
const directives = this.client.apiVersion.gte(API.v390)
|
||||||
|
? tsDirectives390
|
||||||
|
: tsDirectives
|
||||||
let items = directives.map(directive => {
|
let items = directives.map(directive => {
|
||||||
const item = CompletionItem.create(directive.value)
|
const item = CompletionItem.create(directive.value)
|
||||||
item.kind = CompletionItemKind.Snippet
|
item.kind = CompletionItemKind.Snippet
|
||||||
|
|
|
@ -5,61 +5,64 @@
|
||||||
import * as semver from 'semver'
|
import * as semver from 'semver'
|
||||||
|
|
||||||
export default class API {
|
export default class API {
|
||||||
private static fromSimpleString(value: string): API {
|
private static fromSimpleString(value: string): API {
|
||||||
return new API(value, value)
|
return new API(value, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
public static readonly defaultVersion = API.fromSimpleString('1.0.0')
|
public static readonly defaultVersion = API.fromSimpleString('1.0.0')
|
||||||
public static readonly v203 = API.fromSimpleString('2.0.3')
|
public static readonly v203 = API.fromSimpleString('2.0.3')
|
||||||
public static readonly v206 = API.fromSimpleString('2.0.6')
|
public static readonly v206 = API.fromSimpleString('2.0.6')
|
||||||
public static readonly v208 = API.fromSimpleString('2.0.8')
|
public static readonly v208 = API.fromSimpleString('2.0.8')
|
||||||
public static readonly v213 = API.fromSimpleString('2.1.3')
|
public static readonly v213 = API.fromSimpleString('2.1.3')
|
||||||
public static readonly v220 = API.fromSimpleString('2.2.0')
|
public static readonly v220 = API.fromSimpleString('2.2.0')
|
||||||
public static readonly v222 = API.fromSimpleString('2.2.2')
|
public static readonly v222 = API.fromSimpleString('2.2.2')
|
||||||
public static readonly v230 = API.fromSimpleString('2.3.0')
|
public static readonly v230 = API.fromSimpleString('2.3.0')
|
||||||
public static readonly v234 = API.fromSimpleString('2.3.4')
|
public static readonly v234 = API.fromSimpleString('2.3.4')
|
||||||
public static readonly v240 = API.fromSimpleString('2.4.0')
|
public static readonly v240 = API.fromSimpleString('2.4.0')
|
||||||
public static readonly v250 = API.fromSimpleString('2.5.0')
|
public static readonly v250 = API.fromSimpleString('2.5.0')
|
||||||
public static readonly v260 = API.fromSimpleString('2.6.0')
|
public static readonly v260 = API.fromSimpleString('2.6.0')
|
||||||
public static readonly v270 = API.fromSimpleString('2.7.0')
|
public static readonly v270 = API.fromSimpleString('2.7.0')
|
||||||
public static readonly v280 = API.fromSimpleString('2.8.0')
|
public static readonly v280 = API.fromSimpleString('2.8.0')
|
||||||
public static readonly v290 = API.fromSimpleString('2.9.0')
|
public static readonly v290 = API.fromSimpleString('2.9.0')
|
||||||
public static readonly v291 = API.fromSimpleString('2.9.1')
|
public static readonly v291 = API.fromSimpleString('2.9.1')
|
||||||
public static readonly v292 = API.fromSimpleString('2.9.2')
|
public static readonly v292 = API.fromSimpleString('2.9.2')
|
||||||
public static readonly v300 = API.fromSimpleString('3.0.0')
|
public static readonly v300 = API.fromSimpleString('3.0.0')
|
||||||
public static readonly v310 = API.fromSimpleString('3.1.0')
|
public static readonly v310 = API.fromSimpleString('3.1.0')
|
||||||
public static readonly v314 = API.fromSimpleString('3.1.4')
|
public static readonly v314 = API.fromSimpleString('3.1.4')
|
||||||
public static readonly v320 = API.fromSimpleString('3.2.0')
|
public static readonly v320 = API.fromSimpleString('3.2.0')
|
||||||
public static readonly v330 = API.fromSimpleString('3.3.0')
|
public static readonly v330 = API.fromSimpleString('3.3.0')
|
||||||
public static readonly v333 = API.fromSimpleString('3.3.3')
|
public static readonly v333 = API.fromSimpleString('3.3.3')
|
||||||
public static readonly v340 = API.fromSimpleString('3.4.0')
|
public static readonly v340 = API.fromSimpleString('3.4.0')
|
||||||
public static readonly v345 = API.fromSimpleString('3.4.5')
|
public static readonly v345 = API.fromSimpleString('3.4.5')
|
||||||
public static readonly v350 = API.fromSimpleString('3.5.0')
|
public static readonly v350 = API.fromSimpleString('3.5.0')
|
||||||
|
public static readonly v380 = API.fromSimpleString('3.8.0')
|
||||||
|
public static readonly v381 = API.fromSimpleString('3.8.1')
|
||||||
|
public static readonly v390 = API.fromSimpleString('3.9.0')
|
||||||
|
|
||||||
public static fromVersionString(versionString: string): API {
|
public static fromVersionString(versionString: string): API {
|
||||||
let version = semver.valid(versionString)
|
let version = semver.valid(versionString)
|
||||||
if (!version) {
|
if (!version) {
|
||||||
return new API('invalid version', '1.0.0')
|
return new API('invalid version', '1.0.0')
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cut off any prerelease tag since we sometimes consume those on purpose.
|
// Cut off any prerelease tag since we sometimes consume those on purpose.
|
||||||
const index = versionString.indexOf('-')
|
const index = versionString.indexOf('-')
|
||||||
if (index >= 0) {
|
if (index >= 0) {
|
||||||
version = version.substr(0, index)
|
version = version.substr(0, index)
|
||||||
}
|
}
|
||||||
return new API(versionString, version)
|
return new API(versionString, version)
|
||||||
}
|
}
|
||||||
|
|
||||||
private constructor(
|
private constructor(
|
||||||
public readonly versionString: string,
|
public readonly versionString: string,
|
||||||
private readonly version: string
|
private readonly version: string
|
||||||
) { }
|
) { }
|
||||||
|
|
||||||
public gte(other: API): boolean {
|
public gte(other: API): boolean {
|
||||||
return semver.gte(this.version, other.version)
|
return semver.gte(this.version, other.version)
|
||||||
}
|
}
|
||||||
|
|
||||||
public lt(other: API): boolean {
|
public lt(other: API): boolean {
|
||||||
return !this.gte(other)
|
return !this.gte(other)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue