remove textEdit of completionItem
This commit is contained in:
parent
5d0c6830fc
commit
ec6e406594
2 changed files with 5 additions and 71 deletions
|
@ -10,7 +10,7 @@ import * as PConst from '../protocol.const'
|
||||||
import { ITypeScriptServiceClient } from '../typescriptService'
|
import { ITypeScriptServiceClient } from '../typescriptService'
|
||||||
import API from '../utils/api'
|
import API from '../utils/api'
|
||||||
import { applyCodeAction } from '../utils/codeAction'
|
import { applyCodeAction } from '../utils/codeAction'
|
||||||
import { convertCompletionEntry, resolveItem } from '../utils/completionItem'
|
import { convertCompletionEntry } from '../utils/completionItem'
|
||||||
import * as Previewer from '../utils/previewer'
|
import * as Previewer from '../utils/previewer'
|
||||||
import * as typeConverters from '../utils/typeConverters'
|
import * as typeConverters from '../utils/typeConverters'
|
||||||
import TypingsStatus from '../utils/typingsStatus'
|
import TypingsStatus from '../utils/typingsStatus'
|
||||||
|
@ -185,7 +185,6 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP
|
||||||
if (!filepath) return undefined
|
if (!filepath) return undefined
|
||||||
let document = workspace.getDocument(uri)
|
let document = workspace.getDocument(uri)
|
||||||
if (!document) return undefined
|
if (!document) return undefined
|
||||||
resolveItem(item, document)
|
|
||||||
const args: Proto.CompletionDetailsRequestArgs = {
|
const args: Proto.CompletionDetailsRequestArgs = {
|
||||||
...typeConverters.Position.toFileLocationRequestArgs(
|
...typeConverters.Position.toFileLocationRequestArgs(
|
||||||
filepath,
|
filepath,
|
||||||
|
@ -345,18 +344,7 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP
|
||||||
const methodName = detail.displayParts.find(
|
const methodName = detail.displayParts.find(
|
||||||
part => part.kind === 'methodName'
|
part => part.kind === 'methodName'
|
||||||
)
|
)
|
||||||
let { textEdit, data } = item
|
snippet += item.insertText || (methodName && methodName.text) || item.label // tslint:disable-line
|
||||||
let { position, uri } = data
|
|
||||||
|
|
||||||
if (textEdit) {
|
|
||||||
snippet += item.insertText || textEdit.newText // tslint:disable-line
|
|
||||||
} else {
|
|
||||||
let document = workspace.getDocument(uri)
|
|
||||||
if (!document) return
|
|
||||||
let range = document.getWordRangeAtPosition(position)
|
|
||||||
textEdit = { range, newText: '' }
|
|
||||||
snippet += item.insertText || (methodName && methodName.text) || item.label // tslint:disable-line
|
|
||||||
}
|
|
||||||
snippet += '('
|
snippet += '('
|
||||||
let holderIndex = 1
|
let holderIndex = 1
|
||||||
let parenCount = 0
|
let parenCount = 0
|
||||||
|
@ -395,8 +383,8 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP
|
||||||
}
|
}
|
||||||
snippet += ')'
|
snippet += ')'
|
||||||
snippet += '$0'
|
snippet += '$0'
|
||||||
textEdit.newText = snippet
|
// tslint:disable-next-line:deprecation
|
||||||
item.textEdit = textEdit
|
item.insertText = snippet
|
||||||
}
|
}
|
||||||
|
|
||||||
private async isValidFunctionCompletionContext(
|
private async isValidFunctionCompletionContext(
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
* 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 { workspace } from 'coc.nvim'
|
||||||
import { CompletionItem, CompletionItemKind, InsertTextFormat, Position, TextEdit } from 'vscode-languageserver-protocol'
|
import { CompletionItem, CompletionItemKind, InsertTextFormat, Position, TextEdit } from 'vscode-languageserver-protocol'
|
||||||
import { Document, workspace } from 'coc.nvim'
|
|
||||||
import * as Proto from '../protocol'
|
import * as Proto from '../protocol'
|
||||||
import * as PConst from '../protocol.const'
|
import * as PConst from '../protocol.const'
|
||||||
|
|
||||||
|
@ -13,51 +13,6 @@ interface CommitCharactersSettings {
|
||||||
readonly useCodeSnippetsOnMethodSuggest: boolean
|
readonly useCodeSnippetsOnMethodSuggest: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export function resolveItem(
|
|
||||||
item: CompletionItem,
|
|
||||||
document: Document,
|
|
||||||
): void {
|
|
||||||
let { textEdit, label } = item // tslint:disable-line
|
|
||||||
let { position } = item.data
|
|
||||||
if (textEdit) return
|
|
||||||
// try replace more characters after cursor
|
|
||||||
const wordRange = document.getWordRangeAtPosition(position)
|
|
||||||
let text = document.textDocument.getText({
|
|
||||||
start: {
|
|
||||||
line: position.line,
|
|
||||||
character: Math.max(0, position.character - label.length),
|
|
||||||
},
|
|
||||||
end: {
|
|
||||||
line: position.line,
|
|
||||||
character: position.character
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
text = text.toLowerCase()
|
|
||||||
const entryName = label.toLowerCase()
|
|
||||||
|
|
||||||
for (let i = entryName.length; i >= 0; --i) {
|
|
||||||
if (text.endsWith(entryName.substr(0, i)) &&
|
|
||||||
(!wordRange ||
|
|
||||||
wordRange.start.character > position.character - i)) {
|
|
||||||
item.textEdit = {
|
|
||||||
newText: label,
|
|
||||||
range: {
|
|
||||||
start: {
|
|
||||||
line: position.line,
|
|
||||||
character: Math.max(0, position.character - i)
|
|
||||||
},
|
|
||||||
end: {
|
|
||||||
line: position.line,
|
|
||||||
character: position.character
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function convertCompletionEntry(
|
export function convertCompletionEntry(
|
||||||
tsEntry: Proto.CompletionEntry,
|
tsEntry: Proto.CompletionEntry,
|
||||||
uri: string,
|
uri: string,
|
||||||
|
@ -85,16 +40,8 @@ export function convertCompletionEntry(
|
||||||
kind === CompletionItemKind.Method)
|
kind === CompletionItemKind.Method)
|
||||||
) ? InsertTextFormat.Snippet : InsertTextFormat.PlainText
|
) ? InsertTextFormat.Snippet : InsertTextFormat.PlainText
|
||||||
|
|
||||||
let textEdit: TextEdit = null
|
|
||||||
let insertText = tsEntry.insertText
|
let insertText = tsEntry.insertText
|
||||||
let document = workspace.getDocument(uri)
|
let document = workspace.getDocument(uri)
|
||||||
if (insertText) {
|
|
||||||
textEdit = {
|
|
||||||
range: document.getWordRangeAtPosition(position),
|
|
||||||
newText: insertText
|
|
||||||
}
|
|
||||||
insertText = null
|
|
||||||
}
|
|
||||||
let preText = document.getline(position.line).slice(0, position.character)
|
let preText = document.getline(position.line).slice(0, position.character)
|
||||||
const isInValidCommitCharacterContext = preText.match(/(^|[a-z_$\(\)\[\]\{\}]|[^.]\.)\s*$/ig) !== null
|
const isInValidCommitCharacterContext = preText.match(/(^|[a-z_$\(\)\[\]\{\}]|[^.]\.)\s*$/ig) !== null
|
||||||
|
|
||||||
|
@ -104,7 +51,6 @@ export function convertCompletionEntry(
|
||||||
label,
|
label,
|
||||||
insertText,
|
insertText,
|
||||||
kind,
|
kind,
|
||||||
textEdit,
|
|
||||||
insertTextFormat,
|
insertTextFormat,
|
||||||
sortText,
|
sortText,
|
||||||
commitCharacters,
|
commitCharacters,
|
||||||
|
|
Loading…
Reference in a new issue