wikiparser-node
Version:
A Node.js parser for MediaWiki markup with AST
347 lines (346 loc) • 12.1 kB
TypeScript
import type { Range, Position, ColorInformation, ColorPresentation, CompletionItem as CompletionItemBase, CompletionItemKind, FoldingRange, DocumentLink, Location, WorkspaceEdit, Diagnostic, Hover, SignatureHelp, InlayHint, CodeAction, DocumentSymbol } from 'vscode-languageserver-types';
export interface Config {
ext: string[];
readonly html: [string[], string[], string[]];
readonly namespaces: Record<string, string>;
readonly nsid: Record<string, number>;
readonly variable: string[];
readonly functionHook: string[];
readonly parserFunction: [Record<string, string>, Record<string, string> | string[], string[], string[]];
readonly doubleUnderscore: [string[], string[], Record<string, string>?, Record<string, string>?];
readonly protocol: string;
readonly interwiki: string[];
readonly img: Record<string, string>;
readonly redirection: string[];
readonly variants: string[];
readonly articlePath?: string;
readonly conversionTable?: [string, string][];
readonly redirects?: [string, string][];
}
export type ConfigData = Omit<Config, 'excludes'>;
export type TokenTypes = 'root' | 'plain' | 'redirect' | 'redirect-syntax' | 'redirect-target' | 'translate' | 'translate-attr' | 'translate-inner' | 'onlyinclude' | 'noinclude' | 'include' | 'comment' | 'ext' | 'ext-attrs' | 'ext-attr-dirty' | 'ext-attr' | 'attr-key' | 'attr-value' | 'ext-inner' | 'arg' | 'arg-name' | 'arg-default' | 'hidden' | 'magic-word' | 'magic-word-name' | 'invoke-function' | 'invoke-module' | 'template' | 'template-name' | 'parameter' | 'parameter-key' | 'parameter-value' | 'heading' | 'heading-title' | 'heading-trail' | 'html' | 'html-attrs' | 'html-attr-dirty' | 'html-attr' | 'table' | 'tr' | 'td' | 'table-syntax' | 'table-attrs' | 'table-attr-dirty' | 'table-attr' | 'table-inter' | 'td-inner' | 'hr' | 'double-underscore' | 'link' | 'link-target' | 'link-text' | 'category' | 'file' | 'gallery-image' | 'imagemap-image' | 'image-parameter' | 'quote' | 'ext-link' | 'ext-link-text' | 'ext-link-url' | 'free-ext-link' | 'magic-link' | 'list' | 'dd' | 'list-range' | 'converter' | 'converter-flags' | 'converter-flag' | 'converter-rule' | 'converter-rule-variant' | 'converter-rule-to' | 'converter-rule-from' | 'param-line' | 'imagemap-link';
export declare const stages: {
redirect: number;
onlyinclude: number;
noinclude: number;
include: number;
comment: number;
ext: number;
arg: number;
'magic-word': number;
template: number;
heading: number;
html: number;
table: number;
hr: number;
'double-underscore': number;
link: number;
category: number;
file: number;
quote: number;
'ext-link': number;
'free-ext-link': number;
'magic-link': number;
list: number;
dd: number;
converter: number;
'list-range': number;
};
export type Stage = keyof typeof stages;
export declare const rules: readonly ["bold-header", "format-leakage", "fostered-content", "h1", "illegal-attr", "insecure-style", "invalid-gallery", "invalid-imagemap", "invalid-invoke", "invalid-isbn", "lonely-apos", "lonely-bracket", "lonely-http", "nested-link", "no-arg", "no-duplicate", "no-ignored", "obsolete-attr", "obsolete-tag", "parsing-order", "pipe-like", "table-layout", "tag-like", "unbalanced-header", "unclosed-comment", "unclosed-quote", "unclosed-table", "unescaped", "unknown-page", "unmatched-tag", "unterminated-url", "url-encoding", "var-anchor", "void-ext", "invalid-css"];
export declare namespace LintError {
type Severity = 'error' | 'warning';
type Rule = typeof rules[number];
interface Fix {
readonly range: [number, number];
text: string;
desc: string;
}
}
export interface LintError {
rule: LintError.Rule;
message: string;
severity: LintError.Severity;
startIndex: number;
endIndex: number;
startLine: number;
startCol: number;
endLine: number;
endCol: number;
fix?: LintError.Fix;
suggestions?: LintError.Fix[];
code?: string;
}
export type AST = Record<string, string | number | boolean> & {
range: [number, number];
type?: TokenTypes;
name?: string;
childNodes?: AST[];
data?: string;
};
/**
* Node-like
*
* 类似Node
*/
export interface AstNode {
readonly childNodes: readonly AstNode[];
/**
* node type
*
* 节点类型
*/
type: string;
toString(...args: unknown[]): string;
/** Linter */
lint(): LintError[];
/**
* print in HTML
*
* 以HTML格式打印
*/
print(): string;
}
/**
* base class for all tokens
*
* 所有节点的基类
*/
interface Token extends AstNode {
readonly name?: string;
/**
* Get all descendants that match the selector
*
* 符合选择器的所有后代节点
* @param selector selector / 选择器
*/
querySelectorAll<T = Token>(selector: string): T[];
/**
* Save in JSON format
*
* 保存为JSON
*/
json(): AST;
/**
* Generate HTML
*
* 生成HTML
* @since v1.10.0
*/
toHtml(): string;
}
interface SignatureParameter {
label: string;
const?: boolean;
rest?: boolean;
}
export interface SignatureInfo {
aliases: string[];
description: string;
signatures?: SignatureParameter[][];
}
export interface SignatureData {
behaviorSwitches: SignatureInfo[];
parserFunctions: SignatureInfo[];
}
export type CompletionItem = Omit<CompletionItemBase, 'kind'> & {
kind?: CompletionItemKind | keyof typeof CompletionItemKind;
};
export interface LanguageService {
include: boolean;
/**
* Destroy the instance
*
* 销毁实例
*/
destroy(): void;
/**
* Provide color decorators
*
* 提供颜色指示
* @param rgba color parser / 颜色解析函数
* @param text source Wikitext / 源代码
* @param hsl whether HSL colors are treated / 是否允许HSL颜色
*/
provideDocumentColors(rgba: (s: string) => [number, number, number, number] | [], text: string, hsl?: boolean): Promise<ColorInformation[]>;
/**
* Provide color pickers
*
* 颜色选择器
* @param color color information / 颜色信息
*/
provideColorPresentations(color: ColorInformation): ColorPresentation[];
/**
* Provide auto-completion
*
* 提供自动补全
* @param text source Wikitext / 源代码
* @param position position / 位置
*/
provideCompletionItems(text: string, position: Position): Promise<CompletionItem[] | undefined>;
/**
* Provide grammar check
*
* 提供语法检查
* @param text source Wikitext / 源代码
* @param warning whether to include warnings / 是否包含警告
*/
provideDiagnostics(text: string, warning?: boolean): Promise<Diagnostic[]>;
/**
* Resolve fix-all code action
*
* 实现修复全部代码的操作
* @param action code action / 代码操作
*/
resolveCodeAction(action: CodeAction): CodeAction;
/**
* Provide folding ranges
*
* 提供折叠范围
* @param text source Wikitext / 源代码
*/
provideFoldingRanges(text: string): Promise<FoldingRange[]>;
/**
* Provide links
*
* 提供链接
* @param text source Wikitext / 源代码
*/
provideLinks(text: string): Promise<DocumentLink[]>;
/**
* Provide references
*
* 提供引用
* @param text source Wikitext / 源代码
* @param position position / 位置
*/
provideReferences(text: string, position: Position): Promise<Omit<Location, 'uri'>[] | undefined>;
/**
* Provide definitions
*
* 提供定义
* @param text source Wikitext / 源代码
* @param position position / 位置
*/
provideDefinition(text: string, position: Position): Promise<Omit<Location, 'uri'>[] | undefined>;
/**
* Provide locations for renaming
*
* 提供变量更名准备
* @param text source Wikitext / 源代码
* @param position position / 位置
*/
resolveRenameLocation(text: string, position: Position): Promise<Range | undefined>;
/**
* Provide rename edits
*
* 变量更名
* @param text source Wikitext / 源代码
* @param position position / 位置
* @param newName new name / 新名称
*/
provideRenameEdits(text: string, position: Position, newName: string): Promise<WorkspaceEdit | undefined>;
/**
* Provide hover information
*
* 提供悬停信息
* @param text source Wikitext / 源代码
* @param position position / 位置
*/
provideHover(text: string, position: Position): Promise<Hover | undefined>;
/**
* Provide signature help for magic words
*
* 提供魔术字帮助
* @param text source Wikitext / 源代码
* @param position position / 位置
*/
provideSignatureHelp(text: string, position: Position): Promise<SignatureHelp | undefined>;
/**
* Provide CodeLens
*
* 提供 CodeLens
* @param text source Wikitext / 源代码
*/
provideInlayHints(text: string): Promise<InlayHint[]>;
/**
* Provide refactoring actions
*
* 提供重构操作
* @param text source Wikitext / 源代码
* @param range range of the refactoring / 重构范围
*/
provideRefactoringAction(text: string, range?: Range): Promise<CodeAction[]>;
/**
* Provide quick fixes
*
* 提供快速修复建议
* @param diagnostics grammar diagnostics / 语法诊断信息
*/
provideCodeAction(diagnostics: Diagnostic[]): CodeAction[];
/**
* Provide document sections
*
* 提供章节
* @param text source Wikitext / 源代码
*/
provideDocumentSymbols(text: string): Promise<DocumentSymbol[]>;
/**
* Set the target Wikipedia
*
* 设置目标维基百科
* @param wiki Wikipedia URL / 维基百科网址
* @param user URI for wiki userpage or email address of the user / 维基用户页面地址或用户的电子邮件地址
*/
setTargetWikipedia(wiki: string, user: string): Promise<void>;
}
export type SeverityLevel = 0 | 1 | 2 | false | 'off' | 'warning' | 'error';
export type LintConfigValue = SeverityLevel | [SeverityLevel, Record<string, SeverityLevel>?];
export type LintRuleConfig = Partial<Record<LintError.Rule, LintConfigValue>>;
export interface FullLintConfig {
rules: LintRuleConfig;
configurationComment?: string;
ignoreDisables?: boolean;
fix?: boolean;
computeEditInfo?: boolean;
}
export type LintConfig = LintRuleConfig | FullLintConfig;
export interface LintRuleConfiguration extends LintRuleConfig {
getSeverity(rule: LintError.Rule, key?: string): LintError.Severity | false;
}
export interface LintConfiguration extends FullLintConfig {
rules: LintRuleConfiguration;
getSeverity(rule: LintError.Rule, key?: string): LintError.Severity | false;
}
export interface Parser {
config: ConfigData | string;
i18n: Record<string, string> | string | undefined;
/** @since v1.22.0 */
lintConfig: LintConfig;
/** @since v1.9.0 */
viewOnly: boolean;
/**
* Get the current parser configuration
*
* 获取当前的解析设置
* @param config unprocessed parser configuration / 未处理的解析设置
*/
getConfig(config?: ConfigData): Config;
/**
* Parse wikitext
*
* 解析wikitext
* @param include whether to be transcluded / 是否嵌入
* @param maxStage max stage for parsing / 最大解析层级
*/
parse(wikitext: string, include?: boolean, maxStage?: number | Stage | Stage[], config?: Config): Token;
/**
* Create a language server
*
* 创建语言服务
* @param uri document URI / 文档标识
* @since v1.16.1
*/
createLanguageService(uri?: object): LanguageService;
}
export {};