Skip to content

Commit 681e682

Browse files
vezworkjuliasilge
andauthored
overview documentation of the extension (#857)
* WIP documentation of how VE communicates with HOST and LSP * Move Quarto interface next to where it is init'd * Move command registrations in to `activate` * Make Providers in hooks uniform * document `defaultExtensionHost` and move `createPreviewPanel` * Add documentation to help with understanding and navigating * Fix `provideStatementChange` refactor * Fix references to `Quarto` type, add comment * Clarify diagnostics "for YAML" in overview.md Co-authored-by: Julia Silge <[email protected]> * Add diagram --------- Co-authored-by: Julia Silge <[email protected]>
1 parent 605bae6 commit 681e682

File tree

26 files changed

+296
-182
lines changed

26 files changed

+296
-182
lines changed

apps/lsp/src/custom.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ import { Hover, Position, TextDocuments } from "vscode-languageserver";
3131
import { CodeViewCellContext, CodeViewCompletionContext, kCodeViewAssist, kCodeViewGetDiagnostics, kCodeViewGetCompletions, LintItem } from "editor-types";
3232
import { yamlCompletions } from "./service/providers/completion/completion-yaml";
3333
import { yamlHover } from "./service/providers/hover/hover-yaml";
34-
import { EditorContext, Quarto, codeEditorContext } from "./service/quarto";
34+
import { EditorContext, codeEditorContext } from "./service/quarto";
35+
import { Quarto } from "./quarto";
3536

3637
export function registerCustomMethods(
3738
quarto: Quarto,

apps/lsp/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ connection.onInitialized(async () => {
257257
const parser = markdownitParser();
258258

259259
// create language service
260+
// note that `mdLs` is referenced in `connection.onInitialize` above
260261
mdLs = createLanguageService({
261262
config,
262263
quarto,

apps/lsp/src/quarto.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import {
3131
import { QuartoContext } from "quarto-core";
3232

3333
import {
34-
Quarto,
3534
CompletionResult,
3635
EditorContext,
3736
HoverResult,
@@ -42,6 +41,16 @@ import {
4241
} from "./service/quarto";
4342
import { LintItem } from "editor-types";
4443

44+
export interface Quarto extends QuartoContext {
45+
getYamlCompletions(context: EditorContext): Promise<CompletionResult>;
46+
getAttrCompletions(
47+
token: AttrToken,
48+
context: EditorContext
49+
): Promise<CompletionItem[]>;
50+
getYamlDiagnostics(context: EditorContext): Promise<LintItem[]>;
51+
getHover?: (context: EditorContext) => Promise<HoverResult | null>;
52+
}
53+
4554
export async function initializeQuarto(context: QuartoContext): Promise<Quarto> {
4655
const quartoModule = await initializeQuartoYamlModule(context.resourcePath) as QuartoYamlModule;
4756
return {

apps/lsp/src/service/index.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import type { CancellationToken, CompletionContext, TextDocuments } from 'vscode-languageserver';
1818
import * as lsp from 'vscode-languageserver-types';
1919
import { URI } from 'vscode-uri';
20-
import { Document, Parser } from "quarto-core"
20+
import { Document, Parser } from "quarto-core";
2121
import { LsConfiguration } from './config';
2222
import { MdDefinitionProvider } from './providers/definitions';
2323
import { DiagnosticComputer, DiagnosticOnSaveComputer, DiagnosticOptions, DiagnosticsManager, IPullDiagnosticsManager } from './providers/diagnostics';
@@ -33,7 +33,7 @@ import { MdTableOfContentsProvider } from './toc';
3333
import { isWorkspaceWithFileWatching, IWorkspace } from './workspace';
3434
import { MdHoverProvider } from './providers/hover/hover';
3535
import { MdCompletionProvider } from './providers/completion/completion';
36-
import { Quarto } from './quarto';
36+
import { Quarto } from '../quarto';
3737

3838
export { IncludeWorkspaceHeaderCompletions } from './providers/completion/completion';
3939
export type { MdCompletionProvider } from './providers/completion/completion';
@@ -44,7 +44,7 @@ export { DiagnosticCode, DiagnosticLevel } from './providers/diagnostics';
4444
export type { ResolvedDocumentLinkTarget } from './providers/document-links';
4545
export type { ILogger } from './logging';
4646
export { LogLevel } from './logging';
47-
export type { ISlugifier } from './slugify'
47+
export type { ISlugifier } from './slugify';
4848
export { Slug, pandocSlugifier } from './slugify';
4949
export type { ContainingDocumentContext, FileStat, FileWatcherOptions, IFileSystemWatcher, IWorkspace, IWorkspaceWithWatching } from './workspace';
5050

@@ -84,7 +84,7 @@ export interface IMdLanguageService {
8484
*
8585
* @returns The headers and optionally also the link definitions in the file
8686
*/
87-
getDocumentSymbols(document: Document, options: { readonly includeLinkDefinitions?: boolean }, token: CancellationToken): Promise<lsp.DocumentSymbol[]>;
87+
getDocumentSymbols(document: Document, options: { readonly includeLinkDefinitions?: boolean; }, token: CancellationToken): Promise<lsp.DocumentSymbol[]>;
8888

8989
/**
9090
* Get the folding ranges of a markdown file.
@@ -238,7 +238,7 @@ export function createLanguageService(init: LanguageServiceInitialization): IMdL
238238
return documentHighlightProvider.getDocumentHighlights(document, position, token);
239239
},
240240
computeOnSaveDiagnostics: async (doc: Document) => {
241-
return (await diagnosticOnSaveComputer.compute(doc))
241+
return (await diagnosticOnSaveComputer.compute(doc));
242242
},
243243
computeDiagnostics: async (doc: Document, options: DiagnosticOptions, token: CancellationToken): Promise<lsp.Diagnostic[]> => {
244244
return (await diagnosticsComputer.compute(doc, options, token))?.diagnostics;

apps/lsp/src/service/providers/completion/completion-attrs.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
*
1414
*/
1515

16-
import { AttrContext, AttrToken, EditorContext, Quarto } from "../../quarto";
16+
import { AttrContext, AttrToken, EditorContext } from "../../quarto";
17+
import { Quarto } from "../../../quarto";
1718

1819
export async function attrCompletions(quarto: Quarto, context: EditorContext) {
1920

apps/lsp/src/service/providers/completion/completion-yaml.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ import {
2525
} from "vscode-languageserver-types";
2626

2727

28-
import { EditorContext, Quarto } from "../../quarto";
28+
import { EditorContext } from "../../quarto";
29+
import { Quarto } from "../../../quarto";
2930

3031
export async function yamlCompletions(quarto: Quarto, context: EditorContext, stripPadding: boolean) {
3132

@@ -67,7 +68,7 @@ export async function yamlCompletions(quarto: Quarto, context: EditorContext, st
6768
.replace(/(<([^>]+)>)/gi, "")
6869
.replace(/\n/g, " ")
6970
)
70-
}
71+
};
7172
}
7273

7374
// strip padding if requested (vscode doesn't seem to need indentation padding)

apps/lsp/src/service/providers/completion/completion.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import {
2323
CompletionTriggerKind,
2424
TextDocuments
2525
} from "vscode-languageserver";
26-
import { Quarto } from "../../quarto";
26+
import { Quarto } from "../../../quarto";
2727
import { attrCompletions } from "./completion-attrs";
2828
import { latexCompletions } from "./completion-latex";
2929
import { yamlCompletions } from "./completion-yaml";

apps/lsp/src/service/providers/completion/refs/completion-biblio.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import {
2121
import { cslRefs } from "editor-server";
2222

2323
import { Document, Parser, filePathForDoc, documentFrontMatter } from "quarto-core";
24-
import { Quarto } from "../../../quarto";
24+
import { Quarto } from "../../../../quarto";
2525

2626
export async function biblioCompletions(
2727
quarto: Quarto,

apps/lsp/src/service/providers/completion/refs/completion-crossref.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import {
2323
import { XRef } from "editor-types";
2424

2525
import { EditorServerDocuments, xrefsForFile } from "editor-server";
26-
import { Quarto } from "../../../quarto";
26+
import { Quarto } from "../../../../quarto";
2727

2828
export async function crossrefCompletions(
2929
quarto: Quarto,

apps/lsp/src/service/providers/completion/refs/completion-refs.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ import { Range, Position } from "vscode-languageserver-types";
1818
import { CompletionItem, TextDocuments } from "vscode-languageserver";
1919
import { bypassRefIntelligence } from "../../../util/refs";
2020

21-
import { EditorContext, Quarto } from "../../../quarto";
21+
import { EditorContext } from "../../../quarto";
22+
import { Quarto } from "../../../../quarto";
2223
import { projectDirForDocument, filePathForDoc, Document, Parser } from "quarto-core";
2324
import { biblioCompletions } from "./completion-biblio";
2425
import { crossrefCompletions } from "./completion-crossref";

0 commit comments

Comments
 (0)