0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-06 02:52:05 -05:00

more types

This commit is contained in:
Bartek Iwańczuk 2025-01-30 23:44:41 +01:00
parent b3ddde1d4d
commit 46e150dcb0
No known key found for this signature in database
GPG key ID: 0C6BCDDC3B3AD750
3 changed files with 102 additions and 90 deletions

View file

@ -77,13 +77,8 @@ const PropFlags = {
/** @typedef {import("./40_lint_types.d.ts").VisitorFn} VisitorFn */ /** @typedef {import("./40_lint_types.d.ts").VisitorFn} VisitorFn */
/** @typedef {import("./40_lint_types.d.ts").CompiledVisitor} CompiledVisitor */ /** @typedef {import("./40_lint_types.d.ts").CompiledVisitor} CompiledVisitor */
/** @typedef {import("./40_lint_types.d.ts").LintState} LintState */ /** @typedef {import("./40_lint_types.d.ts").LintState} LintState */
/** @typedef {import("./40_lint_types.d.ts").IFixer} IFixer */
/** @typedef {import("./40_lint_types.d.ts").RuleContext} RuleContext */
/** @typedef {import("./40_lint_types.d.ts").LintPlugin} LintPlugin */
/** @typedef {import("./40_lint_types.d.ts").TransformFn} TransformFn */ /** @typedef {import("./40_lint_types.d.ts").TransformFn} TransformFn */
/** @typedef {import("./40_lint_types.d.ts").MatchContext} MatchContext */ /** @typedef {import("./40_lint_types.d.ts").MatchContext} MatchContext */
/** @typedef {import("./40_lint_types.d.ts").INode} INode */
/** @typedef {import("./40_lint_types.d.ts").IReportData} IReportData */
/** @type {LintState} */ /** @type {LintState} */
const state = { const state = {
@ -108,10 +103,10 @@ class CancellationToken {
} }
} }
/** @implements {IFixer} */ /** @implements {Deno.lint.Fixer} */
class Fixer { class Fixer {
/** /**
* @param {INode} node * @param {Deno.lint.Node} node
* @param {string} text * @param {string} text
*/ */
insertTextAfter(node, text) { insertTextAfter(node, text) {
@ -122,7 +117,7 @@ class Fixer {
} }
/** /**
* @param {INode["range"]} range * @param {Deno.lint.Node["range"]} range
* @param {string} text * @param {string} text
*/ */
insertTextAfterRange(range, text) { insertTextAfterRange(range, text) {
@ -133,7 +128,7 @@ class Fixer {
} }
/** /**
* @param {INode} node * @param {Deno.lint.Node} node
* @param {string} text * @param {string} text
*/ */
insertTextBefore(node, text) { insertTextBefore(node, text) {
@ -144,7 +139,7 @@ class Fixer {
} }
/** /**
* @param {INode["range"]} range * @param {Deno.lint.Node["range"]} range
* @param {string} text * @param {string} text
*/ */
insertTextBeforeRange(range, text) { insertTextBeforeRange(range, text) {
@ -155,7 +150,7 @@ class Fixer {
} }
/** /**
* @param {INode} node * @param {Deno.lint.Node} node
*/ */
remove(node) { remove(node) {
return { return {
@ -165,7 +160,7 @@ class Fixer {
} }
/** /**
* @param {INode["range"]} range * @param {Deno.lint.Node["range"]} range
*/ */
removeRange(range) { removeRange(range) {
return { return {
@ -175,7 +170,7 @@ class Fixer {
} }
/** /**
* @param {INode} node * @param {Deno.lint.Node} node
* @param {string} text * @param {string} text
*/ */
replaceText(node, text) { replaceText(node, text) {
@ -186,7 +181,7 @@ class Fixer {
} }
/** /**
* @param {INode["range"]} range * @param {Deno.lint.Node["range"]} range
* @param {string} text * @param {string} text
*/ */
replaceTextRange(range, text) { replaceTextRange(range, text) {
@ -200,7 +195,7 @@ class Fixer {
/** /**
* Every rule gets their own instance of this class. This is the main * Every rule gets their own instance of this class. This is the main
* API lint rules interact with. * API lint rules interact with.
* @implements {RuleContext} * @implements {Deno.lint.RuleContext}
*/ */
export class Context { export class Context {
id; id;
@ -226,7 +221,7 @@ export class Context {
} }
/** /**
* @param {IReportData} data * @param {Deno.lint.ReportData} data
*/ */
report(data) { report(data) {
const range = data.node ? data.node.range : data.range ? data.range : null; const range = data.node ? data.node.range : data.range ? data.range : null;
@ -260,7 +255,7 @@ export class Context {
} }
/** /**
* @param {LintPlugin[]} plugins * @param {Deno.lint.Plugin[]} plugins
* @param {string[]} exclude * @param {string[]} exclude
*/ */
export function installPlugins(plugins, exclude) { export function installPlugins(plugins, exclude) {
@ -274,7 +269,7 @@ export function installPlugins(plugins, exclude) {
} }
/** /**
* @param {LintPlugin} plugin * @param {Deno.lint.Plugin} plugin
*/ */
function installPlugin(plugin) { function installPlugin(plugin) {
if (typeof plugin !== "object") { if (typeof plugin !== "object") {
@ -459,7 +454,7 @@ function readType(buf, idx) {
/** /**
* @param {AstContext} ctx * @param {AstContext} ctx
* @param {number} idx * @param {number} idx
* @returns {INode["range"]} * @returns {Deno.lint.Node["range"]}
*/ */
function readSpan(ctx, idx) { function readSpan(ctx, idx) {
let offset = ctx.spansOffset + (idx * SPAN_SIZE); let offset = ctx.spansOffset + (idx * SPAN_SIZE);

View file

@ -1,17 +1,11 @@
// Copyright 2018-2025 the Deno authors. MIT license. // Copyright 2018-2025 the Deno authors. MIT license.
export interface INode {
type: string;
range: [number, number];
[key: string]: unknown;
}
export interface AstContext { export interface AstContext {
buf: Uint8Array; buf: Uint8Array;
strTable: Map<number, string>; strTable: Map<number, string>;
strTableOffset: number; strTableOffset: number;
rootOffset: number; rootOffset: number;
nodes: Map<number, INode>; nodes: Map<number, Deno.lint.Node>;
spansOffset: number; spansOffset: number;
propsOffset: number; propsOffset: number;
strByType: number[]; strByType: number[];
@ -21,52 +15,8 @@ export interface AstContext {
matcher: MatchContext; matcher: MatchContext;
} }
export type TRange = [number, number];
export interface IFixData {
range: TRange;
text?: string;
}
export interface IFixer {
insertTextAfter(node: INode, text: string): IFixData;
insertTextAfterRange(range: TRange, text: string): IFixData;
insertTextBefore(node: INode, text: string): IFixData;
insertTextBeforeRange(range: TRange, text: string): IFixData;
remove(node: INode): IFixData;
removeRange(range: TRange): IFixData;
replaceText(node: INode, text: string): IFixData;
replaceTextRange(range: TRange, text: string): IFixData;
}
export interface IReportData {
node?: INode;
range?: TRange;
message: string;
hint?: string;
fix?(fixer: IFixer): IFixData;
}
// TODO(@marvinhagemeister) Remove once we land "official" types
export interface RuleContext {
id: string;
report(data: IReportData): void;
}
// TODO(@marvinhagemeister) Remove once we land "official" types
export interface LintRule {
create(ctx: RuleContext): Record<string, (node: unknown) => void>;
destroy?(ctx: RuleContext): void;
}
// TODO(@marvinhagemeister) Remove once we land "official" types
export interface LintPlugin {
name: string;
rules: Record<string, LintRule>;
}
export interface LintState { export interface LintState {
plugins: LintPlugin[]; plugins: Deno.lint.Plugin[];
installedPlugins: Set<string>; installedPlugins: Set<string>;
/** format: `<plugin>/<rule>` */ /** format: `<plugin>/<rule>` */
ignoredRules: Set<string>; ignoredRules: Set<string>;

View file

@ -1341,24 +1341,6 @@ declare namespace Deno {
export {}; // only export exports export {}; // only export exports
} }
/**
* @category Linter
* @experimental
*/
export interface LintRule {
create(context: any): any;
destroy?(context: any): void;
}
/**
* @category Linter
* @experimental
*/
export interface LintPlugin {
name: string;
rules: Record<string, LintRule>;
}
/** /**
* @category Linter * @category Linter
* @experimental * @experimental
@ -1368,7 +1350,92 @@ declare namespace Deno {
* @category Linter * @category Linter
* @experimental * @experimental
*/ */
export interface LintFix { export type Range = [number, number];
/**
* @category Linter
* @experimental
*/
export interface Node {
type: string;
range: Range;
[key: string]: unknown;
}
/**
* @category Linter
* @experimental
*/
export interface FixData {
range: Range;
text?: string;
}
/**
* @category Linter
* @experimental
*/
export interface Fixer {
insertTextAfter(node: Node, text: string): FixData;
insertTextAfterRange(range: Range, text: string): FixData;
insertTextBefore(node: Node, text: string): FixData;
insertTextBeforeRange(range: Range, text: string): FixData;
remove(node: Node): FixData;
removeRange(range: Range): FixData;
replaceText(node: Node, text: string): FixData;
replaceTextRange(range: Range, text: string): FixData;
}
/**
* @category Linter
* @experimental
*/
export interface ReportData {
node?: Node;
range?: Range;
message: string;
hint?: string;
fix?(fixer: Fixer): FixData;
}
/**
* @category Linter
* @experimental
*/
export interface RuleContext {
id: string;
report(data: ReportData): void;
}
export interface Rule {
create(ctx: RuleContext): Record<string, (node: unknown) => void>;
destroy?(ctx: RuleContext): void;
}
/**
* In your plugins file do something like
*
* ```ts
* export default {
* name: "my-plugin",
* rules: {
* TODO:...
* }
* } satisfies Deno.lint.Plugin
* ```
* @category Linter
* @experimental
*/
export interface Plugin {
name: string;
rules: Record<string, Rule>;
}
/**
* @category Linter
* @experimental
*/
export interface Fix {
range: [number, number]; range: [number, number];
text?: string; text?: string;
} }