wikiparse.LanguageService - bhsd-harry/wikiparser-node GitHub Wiki

目录

Other Languages

简介

这是浏览器端的插件添加的全局构造器,可以用作语言服务器,并用于 CodeMirrorMonaco 等网页编辑器(示例)。

这个类继承了 LanguageService 类的全部 🌐 浏览器端可用的属性和方法。这里仅列出参数或返回值的类型有所改变的方法。

Methods

provideDocumentColors

展开

param: string 维基文本内容。
returns: Promise<ColorInformation[]>
列出文档中找到的所有颜色。仅支持十六进制和 rgb(a) 颜色。

// provideDocumentColors (browser)
(async () => {
	const lsp = new wikiparse.LanguageService();
	assert.deepStrictEqual(
		await lsp.provideDocumentColors(
			'<p style="color: rgba(255, 0, 0, .7)">',
		),
		[
			{
				range: {
					start: {line: 0, character: 17},
					end: {line: 0, character: 36},
				},
				color: {red: 1, green: 0, blue: 0, alpha: 0.7},
			},
		],
	);
	assert.deepStrictEqual(
		await lsp.provideDocumentColors(
			'<poem style="color: #00ff00ff"/>',
		),
		[
			{
				range: {
					start: {line: 0, character: 20},
					end: {line: 0, character: 29},
				},
				color: {red: 0, green: 1, blue: 0, alpha: 1},
			},
		],
	);
	assert.deepStrictEqual(
		await lsp.provideDocumentColors(
			"{{#tag:font|color=#f000}}",
		),
		[
			{
				range: {
					start: {line: 0, character: 18},
					end: {line: 0, character: 23},
				},
				color: {red: 1, green: 0, blue: 0, alpha: 0},
			},
		],
	);
	assert.deepStrictEqual(
		await lsp.provideDocumentColors(
			"{{color|rgb(0 0 255 / 50%)}}",
		),
		[
			{
				range: {
					start: {line: 0, character: 8},
					end: {line: 0, character: 26},
				},
				color: {red: 0, green: 0, blue: 1, alpha: 0.5},
			},
		],
	);
})();

provideColorPresentations

展开

param: ColorPresentationParams
returns: Promise<ColorPresentation[]>
获取给定位置的颜色值。

// provideColorPresentations (browser)
(async () => {
	const lsp = new wikiparse.LanguageService({}),
		range = {
			start: {line: 0, character: 0},
			end: {line: 0, character: 1},
		};
	assert.deepStrictEqual(
		await lsp.provideColorPresentations({
			color: {red: 1, green: 0, blue: 0, alpha: 0.5},
			range,
		}),
		[
			{
				label: "rgba(255,0,0,0.5)",
				textEdit: {range, newText: "rgba(255,0,0,0.5)"},
			},
		],
	);
	assert.deepStrictEqual(
		await lsp.provideColorPresentations({
			color: {red: 0, green: 0.9, blue: 0, alpha: 1},
			range,
		}),
		[
			{
				label: "#00e600",
				textEdit: {range, newText: "#00e600"},
			},
		],
	);
})();

provideCompletionItems

展开

param: string 维基文本内容。
param: Position
returns: Promise<CompletionItem[] | undefined>
计算给定光标位置的自动补全项。

// provideCompletionItems (browser)
(async () => {
	const lsp = new wikiparse.LanguageService();
	assert.deepStrictEqual(
		(await lsp.provideCompletionItems("<Im", {line: 0, character: 3}))
			?.filter(({label}) => label.startsWith("im")),
		[
			{
				label: "imagemap",
				kind: "Class",
				textEdit: {
					range: {
						start: {line: 0, character: 1},
						end: {line: 0, character: 3},
					},
					newText: "imagemap",
				},
			},
			{
				label: "img",
				kind: "Class",
				textEdit: {
					range: {
						start: {line: 0, character: 1},
						end: {line: 0, character: 3},
					},
					newText: "img",
				},
			},
		],
	);
})();

provideFoldingRanges

展开

param: string 维基文本内容。
returns: Promise<FoldingRange[]>
返回在给定文档中找到的所有折叠范围。

// provideFoldingRanges (browser)
(async () => {
	const lsp = new wikiparse.LanguageService(),
		wikitext = `
<!--

-->= 1 =

<!-- -->

<!-- -->== 2 ==



===== 3 ===== <!--

--> 

x {{a|
====== 4_<!--
-->2 ====== 
y }} z

== 4 ==


= 4 =

 : {|
|
=== 4 ===
 |} x

`;
	assert.deepStrictEqual(
		await lsp.provideFoldingRanges(wikitext),
		[
			{startLine: 15, endLine: 17, kind: "region"},
			{startLine: 7, endLine: 19, kind: "region"},
			{startLine: 11, endLine: 19, kind: "region"},
			{startLine: 17, endLine: 19, kind: "region"},
			{startLine: 3, endLine: 22, kind: "region"},
			{startLine: 20, endLine: 22, kind: "region"},
			{startLine: 25, endLine: 27, kind: "region"},
			{startLine: 23, endLine: 30, kind: "region"},
			{startLine: 27, endLine: 30, kind: "region"},
		],
	);
})();

provideLinks

展开

param: string 维基文本内容。
returns: Promise<DocumentLink[]>
请求文档中链接的位置。

// provideLinks (browser)
(async () => {
	const lsp = new wikiparse.LanguageService();
	assert.deepStrictEqual(
		await lsp.provideLinks("RFC 1"),
		[
			{
				range: {
					start: {line: 0, character: 0},
					end: {line: 0, character: 5},
				},
				target: "https://datatracker.ietf.org/doc/html/rfc1",
			},
		],
	);
})();

provideReferences

展开

param: string 维基文本内容。
param: Position
returns: Promise<Omit<Location, 'uri'>[] | undefined>
找出文档给定位置处符号的引用。

// provideReferences (browser)
(async () => {
	const lsp = new wikiparse.LanguageService(),
		wikitext = `
{{{ a }}}
{{{a|}}}
`;
	assert.deepStrictEqual(
		await lsp.provideReferences(wikitext, {line: 1, character: 4}),
		[
			{
				range: {
					start: {line: 1, character: 3},
					end: {line: 1, character: 6},
				},
			},
			{
				range: {
					start: {line: 2, character: 3},
					end: {line: 2, character: 4},
				},
			},
		].reverse(),
	);
})();

provideDefinition

展开

param: string 维基文本内容。
param: Position
returns: Promise<Omit<Location, 'uri'>[] | undefined>
找出文档给定位置处符号的定义。

// provideDefinition (browser)
(async () => {
	const lsp = new wikiparse.LanguageService(),
		wikitext = `
<ref group = f name = f > </ref>
<ref name = f > </ref>
<ref name = ' f ' />
`;
	assert.deepStrictEqual(
		await lsp.provideDefinition(wikitext, {line: 3, character: 14}),
		[
			{
				range: {
					start: {line: 2, character: 15},
					end: {line: 2, character: 16},
				},
			},
		],
	);
})();

resolveRenameLocation

展开

param: string 维基文本内容。
param: Position
returns: Promise<Range | undefined>
测试给定位置的变量更名操作的有效性。

// resolveRenameLocation (browser)
(async () => {
	const lsp = new wikiparse.LanguageService();
	assert.deepStrictEqual(
		await lsp.resolveRenameLocation("{{{ a }}}", {line: 0, character: 4}),
		{
			start: {line: 0, character: 3},
			end: {line: 0, character: 6},
		},
	);
})();

provideRenameEdits

展开

param: string 维基文本内容。
param: Position
param: string 新的变量名。
returns: Promise<WorkspaceEdit | undefined>
计算对符号进行文档范围重命名的更改。

// provideRenameEdits (browser)
(async () => {
	const lsp = new wikiparse.LanguageService(),
		wikitext = `
{{{ a }}}
{{{a|}}}
`;
	assert.deepStrictEqual(
		await lsp.provideRenameEdits(wikitext, {line: 1, character: 4}, "x"),
		{
			changes: {
				"": [
					{
						range: {
							start: {line: 1, character: 3},
							end: {line: 1, character: 6},
						},
						newText: "x",
					},
					{
						range: {
							start: {line: 2, character: 3},
							end: {line: 2, character: 4},
						},
						newText: "x",
					},
				].reverse(),
			},
		},
	);
})();

provideDiagnostics

展开

param: string 维基文本内容。
param: boolean 是否包含警告。
returns: Promise<Diagnostic[]>
对给定文档进行语法诊断。

// provideDiagnostics (browser)
(async () => {
	const lsp = new wikiparse.LanguageService();
	assert.deepStrictEqual(
		await lsp.provideDiagnostics("http://a]"),
		[
			{
				range: {
					start: {line: 0, character: 8},
					end: {line: 0, character: 9},
				},
				severity: 1,
				source: "WikiLint",
				code: "lonely-bracket",
				message: 'lonely "]"',
				data: [
					{
						range: {
							start: {line: 0, character: 0},
							end: {line: 0, character: 0},
						},
						newText: "[",
						title: "Suggestion: opening bracket",
						fix: false,
					},
				],
			},
		],
	);
	assert.deepStrictEqual(
		await lsp.provideDiagnostics("</p>"),
		[
			{
				range: {
					start: {line: 0, character: 0},
					end: {line: 0, character: 4},
				},
				severity: 2,
				source: "WikiLint",
				code: "unmatched-tag",
				message: "unmatched closing tag",
				data: [
					{
						range: {
							start: {line: 0, character: 0},
							end: {line: 0, character: 4},
						},
						newText: "",
						title: "Suggestion: remove",
						fix: false,
					},
				],
			},
		],
	);
	assert.deepStrictEqual(
		await lsp.provideDiagnostics("["),
		[
			{
				range: {
					start: {line: 0, character: 0},
					end: {line: 0, character: 1},
				},
				severity: 2,
				source: "WikiLint",
				code: "lonely-bracket",
				message: 'lonely "["',
				data: [],
			},
		],
	);
	assert.deepStrictEqual(
		await lsp.provideDiagnostics("[", false),
		[],
	);
})();

resolveCodeAction

展开

加入的版本:1.24.1

param: rule 要修复的规则。
returns: Promise<CodeAction>
计算修复给定规则的所有错误的代码操作。

// resolveCodeAction (browser)
(async () => {
	const lsp = new wikiparse.LanguageService();
	assert.deepStrictEqual(
		await lsp.provideDiagnostics("</br>"),
		[
			{
				range: {
					start: {line: 0, character: 0},
					end: {line: 0, character: 5},
				},
				severity: 1,
				source: "WikiLint",
				code: "unmatched-tag",
				message: "tag that is both closing and self-closing",
				data: [
					{
						range: {
							start: {line: 0, character: 1},
							end: {line: 0, character: 2},
						},
						newText: "",
						title: "Fix: open",
						fix: true,
					},
				],
			},
		],
	);
	assert.deepStrictEqual(
		await lsp.resolveCodeAction("unmatched-tag"),
		{
			title: "Fix all: unmatched-tag",
			kind: "source.fixAll",
			data: {rule: "unmatched-tag"},
			edit: {
				changes: {
					"": [
						{
							range: {
								start: {line: 0, character: 0},
								end: {line: 0, character: 5},
							},
							newText: "<br>",
						},
					],
				},
			},
		},
	);
	assert.deepStrictEqual(
		await lsp.resolveCodeAction(),
		{
			title: "Fix all: WikiLint",
			kind: "source.fixAll",
			data: {rule: ""},
			edit: {
				changes: {
					"": [
						{
							range: {
								start: {line: 0, character: 0},
								end: {line: 0, character: 5},
							},
							newText: "<br>",
						},
					],
				},
			},
		},
	);
})();

provideInlayHints

展开

加入的版本:1.16.3

param: string 维基文本内容。
returns: Promise<InlayHint[]>
计算给定文档的内联提示,这些提示可能会在编辑器中与其他文本一起呈现。

// provideInlayHints (browser)
(async () => {
	const lsp = new wikiparse.LanguageService();
	assert.deepStrictEqual(
		await lsp.provideInlayHints("{{a|b=|c}}"),
		[
			{
				position: {line: 0, character: 7},
				kind: 2,
				label: "1=",
			},
		],
	);
	assert.deepStrictEqual(
		await lsp.provideInlayHints("{{#invoke:a|b|c}}"),
		[
			{
				position: {line: 0, character: 14},
				kind: 2,
				label: "1=",
			},
		].reverse(),
	);
})();

provideRefactoringAction

展开

加入的版本:1.24.1

param: string 维基文本内容。
param: Range 重构范围。
returns: Promise<CodeAction[]>
计算给定文档范围的重构操作。

// provideRefactoringAction (browser)
(async () => {
	const lsp = new wikiparse.LanguageService();
	assert.deepStrictEqual(
		await lsp.provideRefactoringAction("=", {
			start: {line: 0, character: 0},
			end: {line: 0, character: 1},
		}),
		[
			{
				title: "Escape with magic words",
				kind: "refactor.rewrite",
				edit: {
					changes: {
						"": [
							{
								range: {
									start: {line: 0, character: 0},
									end: {line: 0, character: 1},
								},
								newText: "{{=}}",
							},
						],
					},
				},
			},
		],
	);
	assert.deepStrictEqual(
		await lsp.provideRefactoringAction("{|\n|}", {
			start: {line: 0, character: 0},
			end: {line: 1, character: 2},
		}),
		[
			{
				title: "Escape with magic words",
				kind: "refactor.rewrite",
				edit: {
					changes: {
						"": [
							{
								range: {
									start: {line: 0, character: 0},
									end: {line: 1, character: 2},
								},
								newText: "{{{!}}\n{{!}}}",
							},
						],
					},
				},
			},
		],
	);
})();
⚠️ **GitHub.com Fallback** ⚠️