mirror of https://github.com/onivim/oni.git
Fix completions with newer versions of vscode language server (#2602)
This commit is contained in:
parent
fd6b3017a6
commit
87a2c93702
|
@ -10,6 +10,8 @@ import * as types from "vscode-languageserver-types"
|
|||
|
||||
import { Event, IEvent } from "oni-types"
|
||||
|
||||
import { getDocumentationText } from "../../Plugins/Api/LanguageClient/LanguageClientHelpers"
|
||||
|
||||
import { ContextMenu } from "./../../Services/ContextMenu"
|
||||
|
||||
import * as CompletionUtility from "./../../Services/Completion/CompletionUtility"
|
||||
|
@ -64,7 +66,7 @@ const _convertCompletionForContextMenu = (completion: types.CompletionItem): any
|
|||
|
||||
const getCompletionDocumentation = (item: types.CompletionItem): string | null => {
|
||||
if (item.documentation) {
|
||||
return item.documentation
|
||||
return getDocumentationText(item.documentation)
|
||||
} else if (item.data && item.data.documentation) {
|
||||
return item.data.documentation
|
||||
} else {
|
||||
|
|
|
@ -42,13 +42,13 @@ export const wrapPathInFileUri = (path: string) => getFilePrefix() + Utility.nor
|
|||
export const unwrapFileUriPath = (uri: string) => decodeURIComponent(uri.split(getFilePrefix())[1])
|
||||
|
||||
export const getTextFromContents = (
|
||||
contents: types.MarkedString | types.MarkedString[],
|
||||
contents: types.MarkedString | types.MarkupContent | types.MarkedString[],
|
||||
): IMarkedStringResult[] => {
|
||||
if (contents instanceof Array) {
|
||||
return contents.map(markedString => getTextFromMarkedString(markedString))
|
||||
} else {
|
||||
return [getTextFromMarkedString(contents)]
|
||||
}
|
||||
const text = isMarkupContent(contents) ? getDocumentationText(contents) : contents
|
||||
return [getTextFromMarkedString(text)]
|
||||
}
|
||||
|
||||
export const pathToTextDocumentIdentifierParms = (path: string) => ({
|
||||
|
@ -151,3 +151,15 @@ const getFilePrefix = () => {
|
|||
return "file://"
|
||||
}
|
||||
}
|
||||
|
||||
export function isMarkupContent(input: any): input is types.MarkupContent {
|
||||
return typeof input === "object" && input !== null && "value" in input && "kind" in input
|
||||
}
|
||||
|
||||
export const getDocumentationText = (documentation: string | types.MarkupContent) => {
|
||||
// Documentation can be a string or an object specifying the documentations type as well as the value.
|
||||
if (typeof documentation === "string") {
|
||||
return documentation
|
||||
}
|
||||
return documentation.value
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ import { ContextMenuState } from "./ContextMenu"
|
|||
export interface IContextMenuItem {
|
||||
label: string
|
||||
detail?: string
|
||||
documentation?: string
|
||||
documentation?: string | types.MarkupContent
|
||||
icon?: string
|
||||
}
|
||||
|
||||
|
|
|
@ -16,14 +16,17 @@ export const sortTextEdits = (edits: types.TextEdit[]): types.TextEdit[] => {
|
|||
return sortedEdits
|
||||
}
|
||||
|
||||
export const convertTextDocumentEditsToFileMap = (
|
||||
edits: types.TextDocumentEdit[],
|
||||
export const convertTextDocumentChangesToFileMap = (
|
||||
edits: Array<types.TextDocumentEdit | types.CreateFile | types.RenameFile | types.DeleteFile>,
|
||||
): { [fileUri: string]: types.TextEdit[] } => {
|
||||
if (!edits) {
|
||||
return {}
|
||||
}
|
||||
|
||||
return edits.reduce((prev, curr) => {
|
||||
if (!("textDocument" in curr)) {
|
||||
return prev
|
||||
}
|
||||
return {
|
||||
...prev,
|
||||
[curr.textDocument.uri]: edits,
|
||||
|
|
|
@ -2,6 +2,7 @@ import * as React from "react"
|
|||
|
||||
import * as types from "vscode-languageserver-types"
|
||||
|
||||
import { getDocumentationText } from "../../Plugins/Api/LanguageClient/LanguageClientHelpers"
|
||||
import {
|
||||
QuickInfoDocumentation,
|
||||
QuickInfoElement,
|
||||
|
@ -66,7 +67,9 @@ export const getElementsFromType = (signatureHelp: types.SignatureHelp): JSX.Ele
|
|||
{elements}
|
||||
</Title>
|
||||
{!!(selectedArgument && selectedArgument.documentation) && (
|
||||
<QuickInfoDocumentation text={selectedArgument.documentation} />
|
||||
<QuickInfoDocumentation
|
||||
text={getDocumentationText(selectedArgument.documentation)}
|
||||
/>
|
||||
)}
|
||||
</React.Fragment>
|
||||
)
|
||||
|
|
|
@ -26,7 +26,7 @@ import * as Helpers from "./../../Plugins/Api/LanguageClient/LanguageClientHelpe
|
|||
|
||||
import { Configuration } from "./../Configuration"
|
||||
import { EditorManager } from "./../EditorManager"
|
||||
import { convertTextDocumentEditsToFileMap } from "./../Language/Edits"
|
||||
import { convertTextDocumentChangesToFileMap } from "./../Language/Edits"
|
||||
|
||||
import { WorkspaceConfiguration } from "./WorkspaceConfiguration"
|
||||
|
||||
|
@ -73,7 +73,7 @@ export class Workspace implements Oni.Workspace.Api {
|
|||
public async applyEdits(edits: types.WorkspaceEdit): Promise<void> {
|
||||
let editsToUse = edits
|
||||
if (edits.documentChanges) {
|
||||
editsToUse = convertTextDocumentEditsToFileMap(edits.documentChanges)
|
||||
editsToUse = convertTextDocumentChangesToFileMap(edits.documentChanges)
|
||||
}
|
||||
|
||||
const files = Object.keys(editsToUse)
|
||||
|
|
|
@ -891,7 +891,7 @@
|
|||
"vscode-html-languageserver-bin": "^1.1.0",
|
||||
"vscode-jsonrpc": "3.5.0",
|
||||
"vscode-languageserver": "3.5.0",
|
||||
"vscode-languageserver-types": "3.5.0",
|
||||
"vscode-languageserver-types": "3.13.0",
|
||||
"vscode-textmate": "3.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
|
22
yarn.lock
22
yarn.lock
|
@ -10989,17 +10989,35 @@ vscode-languageserver-protocol@3.5.0, vscode-languageserver-protocol@^3.5.0:
|
|||
vscode-jsonrpc "^3.5.0"
|
||||
vscode-languageserver-types "^3.5.0"
|
||||
|
||||
vscode-languageserver-types@3.5.0, vscode-languageserver-types@^3.5.0:
|
||||
vscode-languageserver-protocol@3.5.1:
|
||||
version "3.5.1"
|
||||
resolved "http://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.5.1.tgz#5144a3a9eeccbd83fe2745bd4ed75fad6cc45f0d"
|
||||
dependencies:
|
||||
vscode-jsonrpc "3.5.0"
|
||||
vscode-languageserver-types "3.5.0"
|
||||
|
||||
vscode-languageserver-types@3.13.0, vscode-languageserver-types@^3.5.0:
|
||||
version "3.13.0"
|
||||
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.13.0.tgz#b704b024cef059f7b326611c99b9c8753c0a18b4"
|
||||
|
||||
vscode-languageserver-types@3.5.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.5.0.tgz#e48d79962f0b8e02de955e3f524908e2b19c0374"
|
||||
|
||||
vscode-languageserver@3.5.0, vscode-languageserver@^3.5.0:
|
||||
vscode-languageserver@3.5.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-3.5.0.tgz#d28099bc6ddda8c1dd16b707e454e1b1ddae0dba"
|
||||
dependencies:
|
||||
vscode-languageserver-protocol "^3.5.0"
|
||||
vscode-uri "^1.0.1"
|
||||
|
||||
vscode-languageserver@^3.5.0:
|
||||
version "3.5.1"
|
||||
resolved "http://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-3.5.1.tgz#e0044b7df4d2447ce12632dfc98f1ab0afacbdff"
|
||||
dependencies:
|
||||
vscode-languageserver-protocol "3.5.1"
|
||||
vscode-uri "^1.0.1"
|
||||
|
||||
vscode-nls@^2.0.1, vscode-nls@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-2.0.2.tgz#808522380844b8ad153499af5c3b03921aea02da"
|
||||
|
|
Loading…
Reference in New Issue