|
@@ -6,21 +6,15 @@
|
|
import { LanguageServiceDefaults } from './monaco.contribution';
|
|
import { LanguageServiceDefaults } from './monaco.contribution';
|
|
import type { CSSWorker } from './cssWorker';
|
|
import type { CSSWorker } from './cssWorker';
|
|
import * as lsTypes from 'vscode-languageserver-types';
|
|
import * as lsTypes from 'vscode-languageserver-types';
|
|
-import {
|
|
|
|
- languages,
|
|
|
|
- editor,
|
|
|
|
- IMarkdownString,
|
|
|
|
- Uri,
|
|
|
|
- Position,
|
|
|
|
- CancellationToken
|
|
|
|
-} from '../fillers/monaco-editor-core';
|
|
|
|
|
|
+import { languages, editor, Uri, Position, CancellationToken } from '../fillers/monaco-editor-core';
|
|
import {
|
|
import {
|
|
DiagnosticsAdapter,
|
|
DiagnosticsAdapter,
|
|
fromPosition,
|
|
fromPosition,
|
|
toRange,
|
|
toRange,
|
|
toTextEdit,
|
|
toTextEdit,
|
|
fromRange,
|
|
fromRange,
|
|
- CompletionAdapter
|
|
|
|
|
|
+ CompletionAdapter,
|
|
|
|
+ HoverAdapter
|
|
} from '../common/lspLanguageFeatures';
|
|
} from '../common/lspLanguageFeatures';
|
|
|
|
|
|
export interface WorkerAccessor {
|
|
export interface WorkerAccessor {
|
|
@@ -39,71 +33,7 @@ export class CSSCompletionAdapter extends CompletionAdapter<CSSWorker> {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-function isMarkupContent(thing: any): thing is lsTypes.MarkupContent {
|
|
|
|
- return (
|
|
|
|
- thing && typeof thing === 'object' && typeof (<lsTypes.MarkupContent>thing).kind === 'string'
|
|
|
|
- );
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-function toMarkdownString(entry: lsTypes.MarkupContent | lsTypes.MarkedString): IMarkdownString {
|
|
|
|
- if (typeof entry === 'string') {
|
|
|
|
- return {
|
|
|
|
- value: entry
|
|
|
|
- };
|
|
|
|
- }
|
|
|
|
- if (isMarkupContent(entry)) {
|
|
|
|
- if (entry.kind === 'plaintext') {
|
|
|
|
- return {
|
|
|
|
- value: entry.value.replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&')
|
|
|
|
- };
|
|
|
|
- }
|
|
|
|
- return {
|
|
|
|
- value: entry.value
|
|
|
|
- };
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return { value: '```' + entry.language + '\n' + entry.value + '\n```\n' };
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-function toMarkedStringArray(
|
|
|
|
- contents: lsTypes.MarkupContent | lsTypes.MarkedString | lsTypes.MarkedString[]
|
|
|
|
-): IMarkdownString[] | undefined {
|
|
|
|
- if (!contents) {
|
|
|
|
- return void 0;
|
|
|
|
- }
|
|
|
|
- if (Array.isArray(contents)) {
|
|
|
|
- return contents.map(toMarkdownString);
|
|
|
|
- }
|
|
|
|
- return [toMarkdownString(contents)];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-// --- hover ------
|
|
|
|
-
|
|
|
|
-export class HoverAdapter implements languages.HoverProvider {
|
|
|
|
- constructor(private _worker: WorkerAccessor) {}
|
|
|
|
-
|
|
|
|
- provideHover(
|
|
|
|
- model: editor.IReadOnlyModel,
|
|
|
|
- position: Position,
|
|
|
|
- token: CancellationToken
|
|
|
|
- ): Promise<languages.Hover | undefined> {
|
|
|
|
- let resource = model.uri;
|
|
|
|
-
|
|
|
|
- return this._worker(resource)
|
|
|
|
- .then((worker) => {
|
|
|
|
- return worker.doHover(resource.toString(), fromPosition(position));
|
|
|
|
- })
|
|
|
|
- .then((info) => {
|
|
|
|
- if (!info) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- return <languages.Hover>{
|
|
|
|
- range: toRange(info.range),
|
|
|
|
- contents: toMarkedStringArray(info.contents)
|
|
|
|
- };
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
|
|
+export class CSSHoverAdapter extends HoverAdapter<CSSWorker> {}
|
|
|
|
|
|
// --- document highlights ------
|
|
// --- document highlights ------
|
|
|
|
|