Fix completions with newer versions of vscode language server (#2602)

This commit is contained in:
Frederick Gnodtke 2018-10-02 18:29:28 +02:00 committed by Bryan Phelps
parent fd6b3017a6
commit 87a2c93702
8 changed files with 51 additions and 13 deletions

View File

@ -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 {

View File

@ -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
}

View File

@ -23,7 +23,7 @@ import { ContextMenuState } from "./ContextMenu"
export interface IContextMenuItem {
label: string
detail?: string
documentation?: string
documentation?: string | types.MarkupContent
icon?: string
}

View File

@ -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,

View File

@ -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>
)

View File

@ -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)

View File

@ -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": {

View File

@ -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"