qualety 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/LICENSE +21 -0
  2. package/dist/biome.d.ts +18 -0
  3. package/dist/biome.d.ts.map +1 -0
  4. package/dist/biome.js +312 -0
  5. package/dist/biome.js.map +1 -0
  6. package/dist/cli.d.ts +7 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +149 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/companion-closure.d.ts +2 -0
  11. package/dist/companion-closure.d.ts.map +1 -0
  12. package/dist/companion-closure.js +29 -0
  13. package/dist/companion-closure.js.map +1 -0
  14. package/dist/config.d.ts +51 -0
  15. package/dist/config.d.ts.map +1 -0
  16. package/dist/config.js +222 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/default-providers.d.ts +5 -0
  19. package/dist/default-providers.d.ts.map +1 -0
  20. package/dist/default-providers.js +5 -0
  21. package/dist/default-providers.js.map +1 -0
  22. package/dist/define-rule.d.ts +9 -0
  23. package/dist/define-rule.d.ts.map +1 -0
  24. package/dist/define-rule.js +5 -0
  25. package/dist/define-rule.js.map +1 -0
  26. package/dist/define-rule.types.d.ts +2 -0
  27. package/dist/define-rule.types.d.ts.map +1 -0
  28. package/dist/define-rule.types.js +33 -0
  29. package/dist/define-rule.types.js.map +1 -0
  30. package/dist/engine.d.ts +10 -0
  31. package/dist/engine.d.ts.map +1 -0
  32. package/dist/engine.js +447 -0
  33. package/dist/engine.js.map +1 -0
  34. package/dist/git-seed.d.ts +2 -0
  35. package/dist/git-seed.d.ts.map +1 -0
  36. package/dist/git-seed.js +52 -0
  37. package/dist/git-seed.js.map +1 -0
  38. package/dist/index.d.ts +138 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +13 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/record.d.ts +2 -0
  43. package/dist/record.d.ts.map +1 -0
  44. package/dist/record.js +4 -0
  45. package/dist/record.js.map +1 -0
  46. package/dist/ruff.d.ts +17 -0
  47. package/dist/ruff.d.ts.map +1 -0
  48. package/dist/ruff.js +303 -0
  49. package/dist/ruff.js.map +1 -0
  50. package/dist/rule-options.d.ts +3 -0
  51. package/dist/rule-options.d.ts.map +1 -0
  52. package/dist/rule-options.js +78 -0
  53. package/dist/rule-options.js.map +1 -0
  54. package/dist/run-command.d.ts +13 -0
  55. package/dist/run-command.d.ts.map +1 -0
  56. package/dist/run-command.js +60 -0
  57. package/dist/run-command.js.map +1 -0
  58. package/dist/schemas.d.ts +125 -0
  59. package/dist/schemas.d.ts.map +1 -0
  60. package/dist/schemas.js +79 -0
  61. package/dist/schemas.js.map +1 -0
  62. package/dist/standalone-wasm.d.ts +7 -0
  63. package/dist/standalone-wasm.d.ts.map +1 -0
  64. package/dist/standalone-wasm.js +31 -0
  65. package/dist/standalone-wasm.js.map +1 -0
  66. package/dist/typescript-frontend.d.ts +4 -0
  67. package/dist/typescript-frontend.d.ts.map +1 -0
  68. package/dist/typescript-frontend.js +105 -0
  69. package/dist/typescript-frontend.js.map +1 -0
  70. package/package.json +46 -0
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Public plugin contract. See docs/SPECS.md § 2 — this file is the executable
3
+ * copy of that section and must stay in sync with it.
4
+ */
5
+ import type { UserConfig } from "./config.ts";
6
+ export type { UserConfig };
7
+ export type Severity = "error" | "warn" | "off";
8
+ /** Exact string locked in docs/SPECS.md §1. Use only when a rule has nothing to suggest. */
9
+ export declare const NO_SUGGESTION = "No suggestion available for this rule.";
10
+ export interface Range {
11
+ start: {
12
+ line: number;
13
+ column: number;
14
+ };
15
+ end: {
16
+ line: number;
17
+ column: number;
18
+ };
19
+ }
20
+ export interface Violation {
21
+ ruleId: string;
22
+ severity: Severity;
23
+ file: string;
24
+ range: Range;
25
+ message: string;
26
+ /** Required. Product rules must use concrete text, not `NO_SUGGESTION`. */
27
+ suggestion: string;
28
+ }
29
+ /** JSON Schema subset on `meta.schema`; applied to `config.rules` options. */
30
+ export type JSONSchema = Record<string, unknown>;
31
+ /**
32
+ * Opaque source handle produced by the default TypeScript provider (ts-morph
33
+ * `SourceFile`). The core never narrows this; plugin rules use `instanceof`
34
+ * / type guards at use sites.
35
+ */
36
+ export type SourceUnit = unknown;
37
+ export interface RuleDocs {
38
+ description: string;
39
+ url?: string;
40
+ }
41
+ export interface RuleMeta {
42
+ docs: RuleDocs;
43
+ schema?: JSONSchema;
44
+ fixable?: "code" | "whitespace";
45
+ /**
46
+ * Artifact ids this rule needs (e.g. `"typescript"`, `"dupehound"`).
47
+ * Engine builds each id once from the single provider map.
48
+ */
49
+ requires?: readonly string[];
50
+ }
51
+ export interface RuleContext<Requires extends readonly string[] = readonly string[]> {
52
+ id: string;
53
+ /** Validated object when config used `[severity, options]`; `undefined` if omitted. */
54
+ options: unknown;
55
+ report(violation: Omit<Violation, "ruleId">): void;
56
+ getCwd(): string;
57
+ /** Workspace paths under include/exclude (display paths, stable order). */
58
+ getFiles(): readonly string[];
59
+ /**
60
+ * Artifact built for this run. Only ids listed in `meta.requires`
61
+ * may be requested; others get an exit-2 error.
62
+ */
63
+ getArtifact<Id extends Requires[number]>(id: Id): Id extends keyof ArtifactMap ? ArtifactMap[Id] : unknown;
64
+ }
65
+ /** Input to a plugin `provides` build. Built once per required id per check. */
66
+ export interface ArtifactBuildContext {
67
+ cwd: string;
68
+ /** Display paths under include/exclude (stable order). */
69
+ files: readonly string[];
70
+ exclude: readonly string[];
71
+ /** Enabled rule ids that listed this artifact in `meta.requires`. */
72
+ requiredBy: readonly string[];
73
+ /**
74
+ * Artifacts already built in this check. Missing id → `undefined` (no throw).
75
+ * Language artifacts (`python`, `typescript`) are built before other ids;
76
+ * `"code-embeddings"` is built last among required ids.
77
+ */
78
+ getArtifact(id: string): unknown;
79
+ }
80
+ export interface ArtifactProvider {
81
+ build(context: ArtifactBuildContext): Promise<unknown> | unknown;
82
+ }
83
+ /** Returned by `create` when a rule wants per-node visiting instead of a one-shot pass. */
84
+ export type RuleListener = Record<string, (node: unknown) => void>;
85
+ export interface Rule {
86
+ meta: RuleMeta;
87
+ /**
88
+ * Once per enabled rule. `void`, not `undefined`: a `create`
89
+ * with no return statement must type-check.
90
+ */
91
+ create(context: RuleContext): void | RuleListener;
92
+ }
93
+ export interface Plugin {
94
+ name: string;
95
+ version?: string;
96
+ rules?: Record<string, Rule>;
97
+ /**
98
+ * Artifact providers registered into one map with other plugins, then
99
+ * gap-filled from the default registry. Duplicate ids fail closed.
100
+ * Ruleless plugins (`name` + `provides`, no `rules`) are shared providers.
101
+ */
102
+ provides?: Record<string, ArtifactProvider>;
103
+ configs?: {
104
+ recommended?: Partial<UserConfig>;
105
+ };
106
+ /**
107
+ * Recommended Biome lint settings (`group/name`). Not product rules.
108
+ * Merged into the generated Biome config; Biome owns the engine.
109
+ */
110
+ biome?: {
111
+ rules?: Record<string, "off" | "warn" | "error" | ["off" | "warn" | "error", Record<string, unknown>]>;
112
+ };
113
+ /**
114
+ * Recommended Ruff lint settings (native codes / prefixes). Not product rules.
115
+ * Merged into the generated Ruff config; Ruff owns the engine.
116
+ */
117
+ ruff?: {
118
+ rules?: Record<string, "off" | "warn" | "error" | ["off" | "warn" | "error", Record<string, unknown>]>;
119
+ };
120
+ }
121
+ /** Opaque to core; default TypeScript provider uses ts-morph Project + SourceFiles. */
122
+ export interface ParsedProject {
123
+ /** Native project handle (ts-morph `Project` for TypeScript). */
124
+ readonly project: unknown;
125
+ /** absolute path → native source unit (ts-morph `SourceFile`). */
126
+ readonly sources: ReadonlyMap<string, SourceUnit>;
127
+ }
128
+ /**
129
+ * Plugins augment via interface merging. Engine still uses Map<string, unknown>.
130
+ */
131
+ export interface ArtifactMap {
132
+ typescript: ParsedProject;
133
+ }
134
+ export declare function defineConfig<T extends UserConfig>(config: T): T;
135
+ export { defineRule } from "./define-rule.ts";
136
+ export { runTimedCommand } from "./run-command.ts";
137
+ export { artifactProviderSchema, functionSchema, pluginProvidesSchema, pluginSchema, requiresSchema, ruleMetaSchema, ruleSchema, } from "./schemas.ts";
138
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Public plugin contract. See docs/SPECS.md § 2 — this file is the executable
3
+ * copy of that section and must stay in sync with it.
4
+ */
5
+ /** Exact string locked in docs/SPECS.md §1. Use only when a rule has nothing to suggest. */
6
+ export const NO_SUGGESTION = "No suggestion available for this rule.";
7
+ export function defineConfig(config) {
8
+ return config;
9
+ }
10
+ export { defineRule } from "./define-rule.js";
11
+ export { runTimedCommand } from "./run-command.js";
12
+ export { artifactProviderSchema, functionSchema, pluginProvidesSchema, pluginSchema, requiresSchema, ruleMetaSchema, ruleSchema, } from "./schemas.js";
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,4FAA4F;AAC5F,MAAM,CAAC,MAAM,aAAa,GAAG,wCAAwC,CAAC;AA8ItE,MAAM,UAAU,YAAY,CAAuB,MAAS;IAC1D,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,UAAU,GACX,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
2
+ //# sourceMappingURL=record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../src/record.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE"}
package/dist/record.js ADDED
@@ -0,0 +1,4 @@
1
+ export function isRecord(value) {
2
+ return value !== null && typeof value === "object" && !Array.isArray(value);
3
+ }
4
+ //# sourceMappingURL=record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record.js","sourceRoot":"","sources":["../src/record.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
package/dist/ruff.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ import type { Plugin, UserConfig, Violation } from "./index.ts";
2
+ export declare const GENERATED_RUFF_PATH = ".qualety/ruff.toml";
3
+ export type RuffRuleSetting = "off" | "warn" | "error" | ["off" | "warn" | "error", Record<string, unknown>];
4
+ export declare function ruffEnabled(config: UserConfig): boolean;
5
+ export declare function resolveRuffModule(): string;
6
+ export declare function mergeRuffRules(plugins: readonly Plugin[], userRules: Record<string, RuffRuleSetting> | undefined): Record<string, RuffRuleSetting>;
7
+ export declare function serializeRuffToml(merged: Record<string, RuffRuleSetting>): string;
8
+ export declare function writeGeneratedRuffConfig(cwd: string, plugins: readonly Plugin[], userRuff: UserConfig["ruff"]): Promise<string>;
9
+ export declare function runRuffPhase(input: {
10
+ cwd: string;
11
+ files: readonly string[];
12
+ plugins: readonly Plugin[];
13
+ ruff: UserConfig["ruff"];
14
+ modulePath?: string;
15
+ }): Promise<Violation[]>;
16
+ export declare function readRuffVersion(modulePath?: string): Promise<string>;
17
+ //# sourceMappingURL=ruff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruff.d.ts","sourceRoot":"","sources":["../src/ruff.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAS,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIvE,eAAO,MAAM,mBAAmB,uBAA+B,CAAC;AAKhE,MAAM,MAAM,eAAe,GACvB,KAAK,GACL,MAAM,GACN,OAAO,GACP,CAAC,KAAK,GAAG,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAExD,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAEvD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAa1C;AAeD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,GACrD,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAiBjC;AAuBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,MAAM,CAajF;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,GAC3B,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAoBvB;AAED,wBAAsB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAc1E"}
package/dist/ruff.js ADDED
@@ -0,0 +1,303 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
10
+ import { createRequire } from "node:module";
11
+ import { extname, join } from "node:path";
12
+ import { pathToFileURL } from "node:url";
13
+ import { ConfigError, isStandalone } from "./config.js";
14
+ import { isRecord } from "./record.js";
15
+ const GENERATED_DIR = ".qualety";
16
+ export const GENERATED_RUFF_PATH = `${GENERATED_DIR}/ruff.toml`;
17
+ const DEFAULT_SUGGESTION = "Apply the Ruff finding or override the rule in ruff.rules.";
18
+ const RUFF_RULE_ID = /^[A-Z]+[0-9]*$/;
19
+ const PIN = "@astral-sh/ruff-wasm-nodejs";
20
+ export function ruffEnabled(config) {
21
+ return config.ruff !== false;
22
+ }
23
+ export function resolveRuffModule() {
24
+ const require = createRequire(import.meta.url);
25
+ try {
26
+ return createRequire(require.resolve("@qualety/python/package.json")).resolve(PIN);
27
+ }
28
+ catch (first) {
29
+ try {
30
+ return require.resolve(PIN);
31
+ }
32
+ catch (second) {
33
+ const detail = first instanceof Error ? first.message : String(first);
34
+ void second;
35
+ throw new ConfigError(`Ruff is not resolvable: ${detail}`);
36
+ }
37
+ }
38
+ }
39
+ function assertRuffSetting(id, setting, owner) {
40
+ if (!RUFF_RULE_ID.test(id) || id === "ALL") {
41
+ throw new ConfigError(`Invalid Ruff rule id ${JSON.stringify(id)} (${owner}); expected a Ruff code or prefix.`);
42
+ }
43
+ if (typeof setting !== "string" && Object.keys(setting[1]).length > 0) {
44
+ throw new ConfigError(`Ruff rule ${JSON.stringify(id)} (${owner}) does not accept options this release.`);
45
+ }
46
+ }
47
+ export function mergeRuffRules(plugins, userRules) {
48
+ const layers = [];
49
+ for (const plugin of plugins) {
50
+ layers.push({ owner: `plugin ${plugin.name}`, rules: plugin.ruff?.rules });
51
+ }
52
+ layers.push({ owner: "config.ruff.rules", rules: userRules });
53
+ const merged = {};
54
+ for (const layer of layers) {
55
+ if (layer.rules === undefined) {
56
+ continue;
57
+ }
58
+ for (const [id, setting] of Object.entries(layer.rules)) {
59
+ assertRuffSetting(id, setting, layer.owner);
60
+ merged[id] = setting;
61
+ }
62
+ }
63
+ return merged;
64
+ }
65
+ function ruffLintDeltas(merged) {
66
+ const extendSelect = [];
67
+ const ignore = [];
68
+ for (const id of Object.keys(merged).sort()) {
69
+ const setting = merged[id];
70
+ if (setting === undefined) {
71
+ continue;
72
+ }
73
+ const severity = typeof setting === "string" ? setting : setting[0];
74
+ if (severity === "off") {
75
+ ignore.push(id);
76
+ }
77
+ else {
78
+ extendSelect.push(id);
79
+ }
80
+ }
81
+ return { extendSelect, ignore };
82
+ }
83
+ export function serializeRuffToml(merged) {
84
+ const { extendSelect, ignore } = ruffLintDeltas(merged);
85
+ if (extendSelect.length === 0 && ignore.length === 0) {
86
+ return "";
87
+ }
88
+ const lines = ["[lint]"];
89
+ if (extendSelect.length > 0) {
90
+ lines.push(`extend-select = [${extendSelect.map((id) => `"${id}"`).join(", ")}]`);
91
+ }
92
+ if (ignore.length > 0) {
93
+ lines.push(`ignore = [${ignore.map((id) => `"${id}"`).join(", ")}]`);
94
+ }
95
+ return `${lines.join("\n")}\n`;
96
+ }
97
+ export async function writeGeneratedRuffConfig(cwd, plugins, userRuff) {
98
+ const userRules = userRuff === false || userRuff === undefined ? undefined : userRuff.rules;
99
+ await mkdir(join(cwd, GENERATED_DIR), { recursive: true });
100
+ await writeFile(join(cwd, GENERATED_RUFF_PATH), serializeRuffToml(mergeRuffRules(plugins, userRules)));
101
+ return GENERATED_RUFF_PATH;
102
+ }
103
+ export async function runRuffPhase(input) {
104
+ const paths = input.files.filter((file) => extname(file) === ".py");
105
+ if (paths.length === 0) {
106
+ return [];
107
+ }
108
+ await writeGeneratedRuffConfig(input.cwd, input.plugins, input.ruff);
109
+ const userRules = input.ruff === false || input.ruff === undefined ? undefined : input.ruff.rules;
110
+ const merged = mergeRuffRules(input.plugins, userRules);
111
+ const format = input.ruff !== false && input.ruff?.format === true;
112
+ const wasm = await loadRuffWasm(input.modulePath);
113
+ const workspace = wasm.open(workspaceSettings(merged));
114
+ try {
115
+ const violations = [];
116
+ for (const file of paths) {
117
+ violations.push(...(await lintPythonFile(workspace, input.cwd, file, format, merged)));
118
+ }
119
+ return violations;
120
+ }
121
+ finally {
122
+ workspace.free();
123
+ }
124
+ }
125
+ export async function readRuffVersion(modulePath) {
126
+ try {
127
+ const wasm = await loadRuffWasm(modulePath);
128
+ const version = wasm.version();
129
+ if (typeof version !== "string" || version.length === 0) {
130
+ throw new ConfigError("Ruff is not runnable: empty version");
131
+ }
132
+ return version;
133
+ }
134
+ catch (e) {
135
+ if (e instanceof ConfigError) {
136
+ throw e;
137
+ }
138
+ throw new ConfigError(`Ruff is not runnable: ${e instanceof Error ? e.message : String(e)}`);
139
+ }
140
+ }
141
+ async function loadRuffWasm(modulePath) {
142
+ let loaded;
143
+ try {
144
+ // The literal specifier is load-bearing: it is what lets bun --compile embed
145
+ // the wasm build. The resolve path stays for node, where ruff-wasm belongs to
146
+ // @qualety/python and must not become a hard dependency of the core package.
147
+ loaded =
148
+ isStandalone() && modulePath === undefined
149
+ ? await (await import("./standalone-wasm.js")).loadStandaloneRuff()
150
+ : await import(__rewriteRelativeImportExtension(pathToFileURL(modulePath ?? resolveRuffModule()).href));
151
+ }
152
+ catch (e) {
153
+ throw new ConfigError(`Ruff is not runnable: ${e instanceof Error ? e.message : String(e)}`);
154
+ }
155
+ const namespace = isRecord(loaded) && isRecord(loaded.default) && typeof loaded.default.Workspace === "function"
156
+ ? loaded.default
157
+ : loaded;
158
+ const Workspace = isRecord(namespace) ? namespace.Workspace : undefined;
159
+ const versionFn = typeof Workspace === "function" ? Reflect.get(Workspace, "version") : undefined;
160
+ if (typeof Workspace !== "function" || typeof versionFn !== "function") {
161
+ throw new ConfigError("Ruff is not runnable: Workspace export missing.");
162
+ }
163
+ return {
164
+ version: versionFn.bind(Workspace),
165
+ open(settings) {
166
+ const instance = Reflect.construct(Workspace, [settings, 0]);
167
+ if (!isRecord(instance) ||
168
+ typeof instance.check !== "function" ||
169
+ typeof instance.format !== "function" ||
170
+ typeof instance.free !== "function") {
171
+ throw new ConfigError("Ruff is not runnable: Workspace instance missing methods.");
172
+ }
173
+ const check = instance.check;
174
+ const format = instance.format;
175
+ const free = instance.free;
176
+ return {
177
+ check: (contents) => Reflect.apply(check, instance, [contents]),
178
+ format: (contents) => String(Reflect.apply(format, instance, [contents])),
179
+ free: () => {
180
+ Reflect.apply(free, instance, []);
181
+ },
182
+ };
183
+ },
184
+ };
185
+ }
186
+ function workspaceSettings(merged) {
187
+ const { extendSelect, ignore } = ruffLintDeltas(merged);
188
+ const lint = {};
189
+ if (extendSelect.length > 0) {
190
+ lint["extend-select"] = extendSelect;
191
+ }
192
+ if (ignore.length > 0) {
193
+ lint.ignore = ignore;
194
+ }
195
+ return Object.keys(lint).length === 0 ? {} : { lint };
196
+ }
197
+ async function lintPythonFile(workspace, cwd, file, format, merged) {
198
+ let contents;
199
+ try {
200
+ contents = await readFile(join(cwd, file), "utf8");
201
+ }
202
+ catch (e) {
203
+ throw new ConfigError(`Ruff could not read ${JSON.stringify(file)}: ${e instanceof Error ? e.message : String(e)}`);
204
+ }
205
+ const violations = mapRuffCheck(workspace.check(contents), file, merged);
206
+ if (!format) {
207
+ return violations;
208
+ }
209
+ let formatted;
210
+ try {
211
+ formatted = workspace.format(contents);
212
+ }
213
+ catch {
214
+ formatted = undefined;
215
+ }
216
+ if (formatted !== undefined && formatted !== contents) {
217
+ const origin = { line: 1, column: 1 };
218
+ violations.push({
219
+ ruleId: "format",
220
+ severity: "error",
221
+ file,
222
+ range: { start: origin, end: origin },
223
+ message: "File would be reformatted by Ruff.",
224
+ suggestion: "Apply Ruff format or set ruff.format to false.",
225
+ });
226
+ }
227
+ return violations;
228
+ }
229
+ function mapRuffCheck(raw, file, merged) {
230
+ if (!Array.isArray(raw)) {
231
+ return [];
232
+ }
233
+ const violations = [];
234
+ for (const item of raw) {
235
+ const mapped = mapRuffDiagnostic(item, file, merged);
236
+ if (mapped !== undefined) {
237
+ violations.push(mapped);
238
+ }
239
+ }
240
+ return violations;
241
+ }
242
+ function mapRuffDiagnostic(raw, file, merged) {
243
+ if (!isRecord(raw)) {
244
+ return undefined;
245
+ }
246
+ const code = typeof raw.code === "string" && raw.code.length > 0 ? raw.code : undefined;
247
+ if (code === undefined) {
248
+ return undefined;
249
+ }
250
+ const setting = settingFor(code, merged);
251
+ const severityName = setting === undefined ? "error" : typeof setting === "string" ? setting : setting[0];
252
+ if (severityName === "off") {
253
+ return undefined;
254
+ }
255
+ const fix = raw.fix;
256
+ return {
257
+ ruleId: code,
258
+ severity: severityName === "warn" ? "warn" : "error",
259
+ file,
260
+ range: ruffRange(raw),
261
+ message: typeof raw.message === "string" && raw.message.length > 0 ? raw.message : "Ruff diagnostic",
262
+ suggestion: isRecord(fix) && typeof fix.message === "string" && fix.message.length > 0
263
+ ? fix.message
264
+ : DEFAULT_SUGGESTION,
265
+ };
266
+ }
267
+ function settingFor(code, merged) {
268
+ const exact = merged[code];
269
+ if (exact !== undefined) {
270
+ return exact;
271
+ }
272
+ let best;
273
+ for (const id of Object.keys(merged)) {
274
+ if (!code.startsWith(id) || (best !== undefined && id.length <= best.length)) {
275
+ continue;
276
+ }
277
+ if (/^[0-9]*$/.test(code.slice(id.length))) {
278
+ best = id;
279
+ }
280
+ }
281
+ return best === undefined ? undefined : merged[best];
282
+ }
283
+ function ruffRange(raw) {
284
+ const startRaw = raw.start_location;
285
+ const start = isRecord(startRaw)
286
+ ? {
287
+ line: typeof startRaw.row === "number" && startRaw.row >= 1 ? startRaw.row : 1,
288
+ column: typeof startRaw.column === "number" && startRaw.column >= 1 ? startRaw.column : 1,
289
+ }
290
+ : { line: 1, column: 1 };
291
+ const endRaw = raw.end_location;
292
+ if (!isRecord(endRaw)) {
293
+ return { start, end: start };
294
+ }
295
+ return {
296
+ start,
297
+ end: {
298
+ line: typeof endRaw.row === "number" && endRaw.row >= 1 ? endRaw.row : 1,
299
+ column: typeof endRaw.column === "number" && endRaw.column >= 1 ? endRaw.column : 1,
300
+ },
301
+ };
302
+ }
303
+ //# sourceMappingURL=ruff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruff.js","sourceRoot":"","sources":["../src/ruff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { z } from "zod";
2
+ export declare function compileRuleOptions(schema: unknown, ruleId: string): z.ZodType;
3
+ //# sourceMappingURL=rule-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-options.d.ts","sourceRoot":"","sources":["../src/rule-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAS7E"}
@@ -0,0 +1,78 @@
1
+ import { z } from "zod";
2
+ import { ConfigError } from "./config.js";
3
+ import { isRecord } from "./record.js";
4
+ const OBJECT_KEYS = new Set(["type", "properties", "required", "additionalProperties"]);
5
+ const NUMBER_KEYS = new Set(["type", "minimum", "maximum", "exclusiveMinimum", "exclusiveMaximum"]);
6
+ export function compileRuleOptions(schema, ruleId) {
7
+ const record = requireRecord(schema, ruleId);
8
+ if (record.type === "object") {
9
+ return compileObject(record, ruleId);
10
+ }
11
+ if (record.type === "number") {
12
+ return compileNumber(record, ruleId);
13
+ }
14
+ throw unsupportedSchema(ruleId, typeof record.type === "string" ? record.type : "type");
15
+ }
16
+ function compileObject(schema, ruleId) {
17
+ rejectUnknownKeys(schema, OBJECT_KEYS, ruleId);
18
+ const requiredRaw = schema.required;
19
+ const required = new Set();
20
+ if (requiredRaw !== undefined) {
21
+ if (!Array.isArray(requiredRaw) || requiredRaw.some((item) => typeof item !== "string")) {
22
+ throw unsupportedSchema(ruleId, "required");
23
+ }
24
+ for (const key of requiredRaw) {
25
+ required.add(key);
26
+ }
27
+ }
28
+ const propertiesRaw = schema.properties;
29
+ const properties = propertiesRaw === undefined ? {} : requireRecord(propertiesRaw, ruleId);
30
+ const shape = {};
31
+ for (const [key, prop] of Object.entries(properties)) {
32
+ const compiled = compileRuleOptions(prop, ruleId);
33
+ shape[key] = required.has(key) ? compiled : compiled.optional();
34
+ }
35
+ const extra = schema.additionalProperties;
36
+ if (extra === false) {
37
+ return z.object(shape).strict();
38
+ }
39
+ if (extra === true || extra === undefined) {
40
+ return z.object(shape).passthrough();
41
+ }
42
+ throw unsupportedSchema(ruleId, "additionalProperties");
43
+ }
44
+ function compileNumber(schema, ruleId) {
45
+ rejectUnknownKeys(schema, NUMBER_KEYS, ruleId);
46
+ let number = z.number();
47
+ number = applyBound(number, schema.minimum, "minimum", (n, v) => n.min(v), ruleId);
48
+ number = applyBound(number, schema.maximum, "maximum", (n, v) => n.max(v), ruleId);
49
+ number = applyBound(number, schema.exclusiveMinimum, "exclusiveMinimum", (n, v) => n.gt(v), ruleId);
50
+ number = applyBound(number, schema.exclusiveMaximum, "exclusiveMaximum", (n, v) => n.lt(v), ruleId);
51
+ return number;
52
+ }
53
+ function applyBound(number, bound, keyword, apply, ruleId) {
54
+ if (typeof bound === "number") {
55
+ return apply(number, bound);
56
+ }
57
+ if (typeof bound !== "undefined") {
58
+ throw unsupportedSchema(ruleId, keyword);
59
+ }
60
+ return number;
61
+ }
62
+ function requireRecord(value, ruleId) {
63
+ if (!isRecord(value)) {
64
+ throw unsupportedSchema(ruleId, "schema");
65
+ }
66
+ return value;
67
+ }
68
+ function rejectUnknownKeys(schema, allowed, ruleId) {
69
+ for (const key of Object.keys(schema)) {
70
+ if (!allowed.has(key)) {
71
+ throw unsupportedSchema(ruleId, key);
72
+ }
73
+ }
74
+ }
75
+ function unsupportedSchema(ruleId, keyword) {
76
+ return new ConfigError(`Rule "${ruleId}" has unsupported meta.schema (${keyword}).`);
77
+ }
78
+ //# sourceMappingURL=rule-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-options.js","sourceRoot":"","sources":["../src/rule-options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ type TimedCommandResult = {
2
+ code: number | null;
3
+ stdout: string;
4
+ stderr: string;
5
+ timedOut: boolean;
6
+ error: string | undefined;
7
+ };
8
+ export declare function runTimedCommand(bin: string, args: readonly string[], cwd: string, timeoutMs: number, options?: {
9
+ env?: NodeJS.ProcessEnv;
10
+ stdin?: string;
11
+ }): Promise<TimedCommandResult>;
12
+ export {};
13
+ //# sourceMappingURL=run-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-command.d.ts","sourceRoot":"","sources":["../src/run-command.ts"],"names":[],"mappings":"AAEA,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAC;AAEF,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAAC,kBAAkB,CAAC,CAwD7B"}