@linkdesk/plugin-sdk 0.1.28 → 0.1.29
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.
- package/dist/eslint/checks/command-ownership.d.ts +74 -0
- package/dist/eslint/checks/command-ownership.d.ts.map +1 -0
- package/dist/eslint/checks/command-ownership.js +203 -0
- package/dist/eslint/checks/command-ownership.js.map +1 -0
- package/dist/eslint/checks/disable.d.ts +2 -0
- package/dist/eslint/checks/disable.d.ts.map +1 -1
- package/dist/eslint/checks/disable.js +2 -0
- package/dist/eslint/checks/disable.js.map +1 -1
- package/dist/eslint/index.d.ts +8 -0
- package/dist/eslint/index.d.ts.map +1 -1
- package/dist/eslint/index.js +7 -0
- package/dist/eslint/index.js.map +1 -1
- package/dist/eslint/lint.d.ts +14 -0
- package/dist/eslint/lint.d.ts.map +1 -1
- package/dist/eslint/lint.js +38 -3
- package/dist/eslint/lint.js.map +1 -1
- package/package.json +1 -1
- package/schemas/host-reserved.json +67 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { type PluginIdSource } from "./plugin-prefix.js";
|
|
2
|
+
import { type CheckViolation } from "./scan.js";
|
|
3
|
+
/** 本腿要读的两个家族(其余三个家族 —— configKeys / pseudoPluginIds / contextKeys / appearanceIds
|
|
4
|
+
* 由设置键、上下文旗子等后续轮次消费;本腿只取与命令/协议 id 有关的两栏) */
|
|
5
|
+
export interface HostReservedNames {
|
|
6
|
+
commandPrefixes: string[];
|
|
7
|
+
protocolIds: string[];
|
|
8
|
+
}
|
|
9
|
+
/** 读宿主保留面账;文件缺失 ⇒ 空表 + 报告里打一条 note(静默空表 = 判据②变瞎子,不许不吭声) */
|
|
10
|
+
export declare function loadHostReserved(file?: string): HostReservedNames;
|
|
11
|
+
/** 判据命中的两种形态 */
|
|
12
|
+
export type CommandIdCode = "no-plugin-prefix" | "host-reserved";
|
|
13
|
+
/** 扫描面:声明面(plugin.json)/ 运行时面(registerCommand 字面量)/ 协议面(registerProtocol 字面量) */
|
|
14
|
+
export type CommandIdFace = "declared" | "runtime" | "protocol";
|
|
15
|
+
/** 一处不合规站点(探针 `scripts/audit-nonnaming.mjs` 与腿共用同一份数据) */
|
|
16
|
+
export interface CommandIdSite {
|
|
17
|
+
face: CommandIdFace;
|
|
18
|
+
/** 工程相对路径(正斜杠);声明面恒为 `plugin.json` */
|
|
19
|
+
file: string;
|
|
20
|
+
line: number;
|
|
21
|
+
id: string;
|
|
22
|
+
code: CommandIdCode;
|
|
23
|
+
/** 应改成什么(前缀形状:`<pluginId>.` + 原名——只插入不改词干,改名映射可机械生成) */
|
|
24
|
+
suggested: string;
|
|
25
|
+
/** code = host-reserved 时:撞上的那条宿主保留前缀 / 宿主内置协议 id */
|
|
26
|
+
reserved?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface CommandOwnershipReport {
|
|
29
|
+
root: string;
|
|
30
|
+
pluginId: string | null;
|
|
31
|
+
pluginIdSource: PluginIdSource | null;
|
|
32
|
+
pluginIdNote: string | null;
|
|
33
|
+
/** fail-closed:非 null ⇒ 本腿报红(拿不到身份就无从判归属) */
|
|
34
|
+
error: string | null;
|
|
35
|
+
/** 不合规站点(已过豁免) */
|
|
36
|
+
sites: CommandIdSite[];
|
|
37
|
+
/** 三面的**全部** id(合规 + 不合规,按出现顺序去重)——探针的读数面(口径:名数,非站点数) */
|
|
38
|
+
declaredIds: string[];
|
|
39
|
+
runtimeIds: string[];
|
|
40
|
+
protocolIds: string[];
|
|
41
|
+
/** 账的加载实况(账没读到 ⇒ 判据②空转,报告里必须能看出来) */
|
|
42
|
+
hostLedger: {
|
|
43
|
+
file: string;
|
|
44
|
+
found: boolean;
|
|
45
|
+
commandPrefixes: number;
|
|
46
|
+
protocolIds: number;
|
|
47
|
+
};
|
|
48
|
+
/** 腿报点(= fail-closed + 不合规站点) */
|
|
49
|
+
violations: CheckViolation[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 一条命令/协议 id 的裁决(纯函数——单测与探针共用,别在别处再写一份判据)。
|
|
53
|
+
*
|
|
54
|
+
* 🔴 建议名的形状 = **只替换第一段**(`explorer.newFile` → `file-tree.newFile`,词干零变化)——
|
|
55
|
+
* 命令 id 是 `<pluginId>.<名>` 的**两段结构**,归属段就是第一段(1.31 §10.2 拍板的改名形状,
|
|
56
|
+
* 也是 1.42 改名轮要用的映射)。⚠️ 这与 CSS 腿的「**叠加**前缀」形状(`ms-item` →
|
|
57
|
+
* `marketplace-ms-item`)**不同**:那里没有结构化的第一段,只有"插进命名空间"一种改法。
|
|
58
|
+
*/
|
|
59
|
+
export declare function judgeCommandId(id: string, pluginId: string, reserved: HostReservedNames, face: CommandIdFace): {
|
|
60
|
+
code: CommandIdCode;
|
|
61
|
+
suggested: string;
|
|
62
|
+
reserved?: string;
|
|
63
|
+
} | null;
|
|
64
|
+
/** 运行时面:`registerCommand("<字面量>")`——与壳仓 `scripts/audit-plugin-scope.mjs` 同一条正则口径 */
|
|
65
|
+
export declare const RE_REGISTER_COMMAND: RegExp;
|
|
66
|
+
/** 协议面:`registerProtocol({ id: "<字面量>" })`(id 在对象字面量里,允许中间隔着别的键) */
|
|
67
|
+
export declare const RE_REGISTER_PROTOCOL: RegExp;
|
|
68
|
+
/** 取 manifest 里某个 id 的行号(JSONC 原文里找 `"id": "<id>"`;找不到 ⇒ 1,不许当成「不存在」) */
|
|
69
|
+
export declare function manifestIdLine(raw: string, id: string): number;
|
|
70
|
+
/**
|
|
71
|
+
* 跑本仓命令/协议 id 归属判据。返回结构化报告(探针用)+ 腿报点(`lint.ts` 用)——**同一份实现**。
|
|
72
|
+
*/
|
|
73
|
+
export declare function runCommandOwnershipCheck(root: string, reserved?: HostReservedNames, reservedFile?: string): CommandOwnershipReport;
|
|
74
|
+
//# sourceMappingURL=command-ownership.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-ownership.d.ts","sourceRoot":"","sources":["../../../src/eslint/checks/command-ownership.ts"],"names":[],"mappings":"AAkCA,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;AAUnB;6CAC6C;AAC7C,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,MAA2B,GAAG,iBAAiB,CAOrF;AAED,gBAAgB;AAChB,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG,eAAe,CAAC;AAEjE,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;AAEhE,0DAA0D;AAC1D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,aAAa,CAAC;IACpB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,6CAA6C;IAC7C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,kBAAkB;IAClB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,yDAAyD;IACzD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,qCAAqC;IACrC,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3F,iCAAiC;IACjC,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,aAAa,GAClB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CActE;AAqBD,oFAAoF;AACpF,eAAO,MAAM,mBAAmB,QAAgD,CAAC;AACjF,oEAAoE;AACpE,eAAO,MAAM,oBAAoB,QAA4E,CAAC;AAE9G,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAK9D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,iBAAsC,EAChD,YAAY,GAAE,MAA2B,GACxC,sBAAsB,CAyGxB"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* check-command-ownership 腿·**命令 id 与协议 id 的归属判据**(E6#111b · 轮次 1.32)。
|
|
3
|
+
*
|
|
4
|
+
* ── 为什么(本件立项的那条轴)──
|
|
5
|
+
* 命令 id 是**跨插件调用面**(`executeCommand`)+ `menus[].command` / `keybindings[].command` 的引用目标。
|
|
6
|
+
* 1.31 实测:官方 18 仓有 **26 个名 / 46 处** 的命令 id **不带本仓归属**(`editor.selectForCompare`
|
|
7
|
+
* 属主其实是 `file-tree` 插件),且壳侧旧实现的归属**从名字第一段猜**(`commandId.split(".")[0]`)
|
|
8
|
+
* ⇒ 两个插件用同一前缀时**静默互相覆盖**(不报错、只是有一个永远不生效)。
|
|
9
|
+
* ⇒ 归属必须**从身份来**:`contributes.commands[].id` 的第一段就该是本仓 `pluginId`。
|
|
10
|
+
*
|
|
11
|
+
* ── 三条判据(与壳仓 `scripts/gen-host-reserved.mjs` 的账同源)──
|
|
12
|
+
* ① `<pluginId>.` 前缀:命令 id / 协议 id 的第一段 == 本仓 `pluginId`(**结构判定,不查表**)。
|
|
13
|
+
* ② **宿主保留面**:不得落在账(包内 `schemas/host-reserved.json`)的 `commandPrefixes` /
|
|
14
|
+
* `protocolIds` 里——占了就是「顶替宿主命令」(`workbench.action.showCommands` 那种真形态)。
|
|
15
|
+
* 🔴 账是**生成式 + 双向对账**的(壳仓 `npm run check` 守),**本腿只许读账、不许内联一份**:
|
|
16
|
+
* 规则里内联前缀清单 = 手抄表 = 假判据(1.31 §八 已把这条写成禁区)。
|
|
17
|
+
* ③ **扫描面**(三面都判 ①②,分别报点、读口径不同):
|
|
18
|
+
* · **声明面** = `plugin.json` 的 `contributes.commands[].id`(**权威面**,loader 用真身份注册);
|
|
19
|
+
* · **运行时面** = 源码里 `registerCommand("<字面量>")` 的调用点(**改名要同笔改的另一半**);
|
|
20
|
+
* · **协议面** = 源码里 `registerProtocol({ id: "<字面量>" })`(协议 id 与命令 id 同族:都是
|
|
21
|
+
* 全局名册的键,`ProtocolRegistry` 用 `Map` + 重复注册只 `console.warn` 后照旧覆盖)。
|
|
22
|
+
*
|
|
23
|
+
* ── 🔴 本格(1.32)只判**黄**,别在这里自行判红 ──
|
|
24
|
+
* 官方仓此刻**还没改名**(改名归 1.42–1.48,前置 1.41);判红会让插件仓 CI 处于一段无谓的红窗。
|
|
25
|
+
* 本腿的报点**进 `runPluginLint` 的 WARN 通道**(`bin lint` 退出码只看 eslint 的 severity 2
|
|
26
|
+
* ——见 `src/bin.ts`)⇒ 天然是黄灯。**1.49 才收紧为红**(照 1.31 §12 的分级表)。
|
|
27
|
+
*
|
|
28
|
+
* 知情绕行 = 标准 disable 注释(`CHECK_IDS.commandOwnership`)。⚠️ **fail-closed 不参与豁免**:
|
|
29
|
+
* 拿不到 `pluginId` 说的不是「你的 id 怎么写」,而是「你的身份读不到」——那是工程根的问题。
|
|
30
|
+
*/
|
|
31
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
32
|
+
import { dirname, join, resolve } from "node:path";
|
|
33
|
+
import { fileURLToPath } from "node:url";
|
|
34
|
+
import { readPluginManifest } from "../../validate.js";
|
|
35
|
+
import { resolvePluginIdForCss } from "./plugin-prefix.js";
|
|
36
|
+
import { collectFiles, isTestOrMockRel, readSource, relPath, } from "./scan.js";
|
|
37
|
+
import { buildDisableIndex, isDisabled, CHECK_IDS } from "./disable.js";
|
|
38
|
+
/**
|
|
39
|
+
* 包内宿主保留面账定位(dist/eslint/checks/x.js → ../../../schemas = 包根/schemas;src 直跑同样命中)。
|
|
40
|
+
* 🔴 写法必须是「路径式」(resolve + fileURLToPath)——`new URL(<字面量>, import.meta.url)` 是
|
|
41
|
+
* Vite 的资产 URL 惯用式,本模块一旦被 Vite 处理会被改写成构建期资产引用(validate.ts 同款坑,E6#91e)。
|
|
42
|
+
*/
|
|
43
|
+
const HOST_RESERVED_FILE = resolve(dirname(fileURLToPath(import.meta.url)), "../../../schemas/host-reserved.json");
|
|
44
|
+
/** 读宿主保留面账;文件缺失 ⇒ 空表 + 报告里打一条 note(静默空表 = 判据②变瞎子,不许不吭声) */
|
|
45
|
+
export function loadHostReserved(file = HOST_RESERVED_FILE) {
|
|
46
|
+
if (!existsSync(file))
|
|
47
|
+
return { commandPrefixes: [], protocolIds: [] };
|
|
48
|
+
const raw = JSON.parse(readFileSync(file, "utf8"));
|
|
49
|
+
return { commandPrefixes: raw.commandPrefixes ?? [], protocolIds: raw.protocolIds ?? [] };
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 一条命令/协议 id 的裁决(纯函数——单测与探针共用,别在别处再写一份判据)。
|
|
53
|
+
*
|
|
54
|
+
* 🔴 建议名的形状 = **只替换第一段**(`explorer.newFile` → `file-tree.newFile`,词干零变化)——
|
|
55
|
+
* 命令 id 是 `<pluginId>.<名>` 的**两段结构**,归属段就是第一段(1.31 §10.2 拍板的改名形状,
|
|
56
|
+
* 也是 1.42 改名轮要用的映射)。⚠️ 这与 CSS 腿的「**叠加**前缀」形状(`ms-item` →
|
|
57
|
+
* `marketplace-ms-item`)**不同**:那里没有结构化的第一段,只有"插进命名空间"一种改法。
|
|
58
|
+
*/
|
|
59
|
+
export function judgeCommandId(id, pluginId, reserved, face) {
|
|
60
|
+
const dot = id.indexOf(".");
|
|
61
|
+
const suggested = `${pluginId}.${dot > 0 ? id.slice(dot + 1) : id}`;
|
|
62
|
+
// ② 宿主保留面(协议面比**全等**——协议 id 是扁平名;命令面比**前缀**——宿主命令带 `.` 分段)
|
|
63
|
+
const hit = face === "protocol"
|
|
64
|
+
? reserved.protocolIds.includes(id)
|
|
65
|
+
? id
|
|
66
|
+
: undefined
|
|
67
|
+
: reserved.commandPrefixes.find((p) => id.startsWith(p));
|
|
68
|
+
if (hit !== undefined)
|
|
69
|
+
return { code: "host-reserved", suggested, reserved: hit };
|
|
70
|
+
// ① 本仓前缀
|
|
71
|
+
if (!id.startsWith(`${pluginId}.`))
|
|
72
|
+
return { code: "no-plugin-prefix", suggested };
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
/** 源码字面量扫描:`collect` 返回 [{id, line, lineText}]——行号按 1-based 计 */
|
|
76
|
+
function scanLiterals(src, re, collect) {
|
|
77
|
+
const out = [];
|
|
78
|
+
for (const m of src.matchAll(re)) {
|
|
79
|
+
const id = collect(m);
|
|
80
|
+
if (!id)
|
|
81
|
+
continue;
|
|
82
|
+
const at = m.index ?? 0;
|
|
83
|
+
const line = src.slice(0, at).split("\n").length;
|
|
84
|
+
const lineStart = src.lastIndexOf("\n", at) + 1;
|
|
85
|
+
const lineEnd = src.indexOf("\n", at);
|
|
86
|
+
out.push({ id, line, lineText: src.slice(lineStart, lineEnd < 0 ? src.length : lineEnd) });
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
/** 运行时面:`registerCommand("<字面量>")`——与壳仓 `scripts/audit-plugin-scope.mjs` 同一条正则口径 */
|
|
91
|
+
export const RE_REGISTER_COMMAND = /registerCommand\s*\(\s*["'`]([^"'`]+)["'`]/g;
|
|
92
|
+
/** 协议面:`registerProtocol({ id: "<字面量>" })`(id 在对象字面量里,允许中间隔着别的键) */
|
|
93
|
+
export const RE_REGISTER_PROTOCOL = /registerProtocol\s*\(\s*\{[\s\S]{0,400}?\bid\s*:\s*["'`]([^"'`]+)["'`]/g;
|
|
94
|
+
/** 取 manifest 里某个 id 的行号(JSONC 原文里找 `"id": "<id>"`;找不到 ⇒ 1,不许当成「不存在」) */
|
|
95
|
+
export function manifestIdLine(raw, id) {
|
|
96
|
+
const esc = id.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
97
|
+
const m = raw.match(new RegExp(`"id"\\s*:\\s*"${esc}"`));
|
|
98
|
+
if (!m || m.index === undefined)
|
|
99
|
+
return 1;
|
|
100
|
+
return raw.slice(0, m.index).split("\n").length;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 跑本仓命令/协议 id 归属判据。返回结构化报告(探针用)+ 腿报点(`lint.ts` 用)——**同一份实现**。
|
|
104
|
+
*/
|
|
105
|
+
export function runCommandOwnershipCheck(root, reserved = loadHostReserved(), reservedFile = HOST_RESERVED_FILE) {
|
|
106
|
+
const absRoot = resolve(root);
|
|
107
|
+
const manifestPath = join(absRoot, "plugin.json");
|
|
108
|
+
const resolution = resolvePluginIdForCss(absRoot);
|
|
109
|
+
const violations = [];
|
|
110
|
+
const report = {
|
|
111
|
+
root: absRoot,
|
|
112
|
+
pluginId: resolution.pluginId,
|
|
113
|
+
pluginIdSource: resolution.source,
|
|
114
|
+
pluginIdNote: resolution.note,
|
|
115
|
+
error: resolution.error,
|
|
116
|
+
sites: [],
|
|
117
|
+
declaredIds: [],
|
|
118
|
+
runtimeIds: [],
|
|
119
|
+
protocolIds: [],
|
|
120
|
+
hostLedger: {
|
|
121
|
+
file: reservedFile,
|
|
122
|
+
found: existsSync(reservedFile),
|
|
123
|
+
commandPrefixes: reserved.commandPrefixes.length,
|
|
124
|
+
protocolIds: reserved.protocolIds.length,
|
|
125
|
+
},
|
|
126
|
+
violations,
|
|
127
|
+
};
|
|
128
|
+
// ── fail-closed(不可豁免:拿不到身份 = 判据①② 全部无从谈起)──
|
|
129
|
+
if (resolution.error || !resolution.pluginId) {
|
|
130
|
+
violations.push({
|
|
131
|
+
file: "plugin.json",
|
|
132
|
+
line: 1,
|
|
133
|
+
message: `拿不到本仓 pluginId:${resolution.error}。归属判据以「本仓身份」为唯一前缀来源——读不到它就无从判` +
|
|
134
|
+
`「这条命令 id 是不是你的」。在插件工程根修好 plugin.json(或显式声明 pluginId),` +
|
|
135
|
+
`别用 disable 注释绕:这是身份问题,不受豁免注释管辖。`,
|
|
136
|
+
});
|
|
137
|
+
return report;
|
|
138
|
+
}
|
|
139
|
+
const pluginId = resolution.pluginId;
|
|
140
|
+
const prefix = `${pluginId}.`;
|
|
141
|
+
const manifestRaw = existsSync(manifestPath) ? readFileSync(manifestPath, "utf8") : "";
|
|
142
|
+
const manifestDisabled = buildDisableIndex(manifestRaw, [CHECK_IDS.commandOwnership]);
|
|
143
|
+
const pushSite = (site, message, disabled) => {
|
|
144
|
+
if (disabled && isDisabled(disabled.idx, disabled.line, CHECK_IDS.commandOwnership))
|
|
145
|
+
return;
|
|
146
|
+
report.sites.push(site);
|
|
147
|
+
violations.push({ file: site.file, line: site.line, message });
|
|
148
|
+
};
|
|
149
|
+
const judgeAndPush = (face, id, file, line, disabled) => {
|
|
150
|
+
const verdict = judgeCommandId(id, pluginId, reserved, face);
|
|
151
|
+
if (!verdict)
|
|
152
|
+
return;
|
|
153
|
+
const where = face === "declared" ? "声明面(plugin.json contributes.commands)" : face === "runtime" ? "运行时面(registerCommand 字面量)" : "协议面(registerProtocol 字面量)";
|
|
154
|
+
const message = verdict.code === "host-reserved"
|
|
155
|
+
? `${where}:id "${id}" 落在**宿主保留面**(${verdict.reserved})里——占用宿主命名 = 顶替宿主命令/协议` +
|
|
156
|
+
`(宿主那条同名命令会永远不生效,且不报错)。改成 "${verdict.suggested}"(前缀只插入、不改词干)。`
|
|
157
|
+
: `${where}:id "${id}" 不带本仓归属(本插件 pluginId = "${pluginId}",应以 "${prefix}" 开头)` +
|
|
158
|
+
`——命令 id 是跨插件调用面,壳侧按第一段找属主:前缀不对 = 归属落到别人头上(或谁都不认)。` +
|
|
159
|
+
`改成 "${verdict.suggested}"。`;
|
|
160
|
+
pushSite({ face, file, line, id, code: verdict.code, suggested: verdict.suggested, ...(verdict.reserved !== undefined ? { reserved: verdict.reserved } : {}) }, message, disabled);
|
|
161
|
+
};
|
|
162
|
+
// ── ① 声明面:contributes.commands[].id(真字段是 id;`command` 是菜单引用用的键名,别读错) ──
|
|
163
|
+
if (manifestRaw) {
|
|
164
|
+
let manifest = null;
|
|
165
|
+
try {
|
|
166
|
+
manifest = readPluginManifest(manifestPath);
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
manifest = null; // 读不出 ⇒ 声明面判据跳过(plugin-prefix 腿已对同一件事 fail-closed 报红,不重复报)
|
|
170
|
+
}
|
|
171
|
+
const cmds = manifest?.contributes?.commands;
|
|
172
|
+
if (Array.isArray(cmds)) {
|
|
173
|
+
for (const c of cmds) {
|
|
174
|
+
const id = c?.id;
|
|
175
|
+
if (typeof id !== "string" || !id)
|
|
176
|
+
continue;
|
|
177
|
+
if (!report.declaredIds.includes(id))
|
|
178
|
+
report.declaredIds.push(id);
|
|
179
|
+
judgeAndPush("declared", id, "plugin.json", manifestIdLine(manifestRaw, id), { idx: manifestDisabled, line: manifestIdLine(manifestRaw, id) });
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// ── ② 运行时面 + ③ 协议面:源码字面量(只扫真源码——测试/mock 跳过,与另几条腿同口径) ──
|
|
184
|
+
for (const abs of collectFiles(absRoot, [".ts", ".tsx", ".js", ".jsx"])) {
|
|
185
|
+
const rel = relPath(absRoot, abs);
|
|
186
|
+
if (isTestOrMockRel(rel))
|
|
187
|
+
continue;
|
|
188
|
+
const src = readSource(abs);
|
|
189
|
+
const idx = buildDisableIndex(src, [CHECK_IDS.commandOwnership]);
|
|
190
|
+
for (const hit of scanLiterals(src, RE_REGISTER_COMMAND, (m) => m[1])) {
|
|
191
|
+
if (!report.runtimeIds.includes(hit.id))
|
|
192
|
+
report.runtimeIds.push(hit.id);
|
|
193
|
+
judgeAndPush("runtime", hit.id, rel, hit.line, { idx, line: hit.line });
|
|
194
|
+
}
|
|
195
|
+
for (const hit of scanLiterals(src, RE_REGISTER_PROTOCOL, (m) => m[1])) {
|
|
196
|
+
if (!report.protocolIds.includes(hit.id))
|
|
197
|
+
report.protocolIds.push(hit.id);
|
|
198
|
+
judgeAndPush("protocol", hit.id, rel, hit.line, { idx, line: hit.line });
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return report;
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=command-ownership.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-ownership.js","sourceRoot":"","sources":["../../../src/eslint/checks/command-ownership.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,8 @@ export declare const CHECK_IDS: {
|
|
|
18
18
|
readonly fontScale: "linkdesk/no-hardcoded-font-size";
|
|
19
19
|
readonly spacingGrid: "linkdesk/no-nonstandard-spacing";
|
|
20
20
|
readonly cssNamespace: "linkdesk/no-reserved-class-name";
|
|
21
|
+
/** E6#111b(1.32):命令 id / 协议 id 必须带本仓 `<pluginId>.` 前缀,且不得占用宿主保留面 */
|
|
22
|
+
readonly commandOwnership: "linkdesk/no-unowned-command-id";
|
|
21
23
|
};
|
|
22
24
|
export interface DisableIndex {
|
|
23
25
|
/** 1-based 行 → 该行豁免的 id 集合(行级 next-line/line + 文件级 disable 区间) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disable.d.ts","sourceRoot":"","sources":["../../../src/eslint/checks/disable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS;;;;;
|
|
1
|
+
{"version":3,"file":"disable.d.ts","sourceRoot":"","sources":["../../../src/eslint/checks/disable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS;;;;;IAKpB,oEAAoE;;CAE5D,CAAC;AAoFX,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;CAClC;AAED,wEAAwE;AACxE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CAmDnF;AAED,oCAAoC;AACpC,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAGjF"}
|
|
@@ -18,6 +18,8 @@ export const CHECK_IDS = {
|
|
|
18
18
|
fontScale: "linkdesk/no-hardcoded-font-size",
|
|
19
19
|
spacingGrid: "linkdesk/no-nonstandard-spacing",
|
|
20
20
|
cssNamespace: "linkdesk/no-reserved-class-name",
|
|
21
|
+
/** E6#111b(1.32):命令 id / 协议 id 必须带本仓 `<pluginId>.` 前缀,且不得占用宿主保留面 */
|
|
22
|
+
commandOwnership: "linkdesk/no-unowned-command-id",
|
|
21
23
|
};
|
|
22
24
|
/** 单遍注释 tokenizer:产出全部 // 行注释与 /* 块注释(块注释可跨行)。 */
|
|
23
25
|
function tokenizeComments(source) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disable.js","sourceRoot":"","sources":["../../../src/eslint/checks/disable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,WAAW,EAAE,2BAA2B;IACxC,SAAS,EAAE,iCAAiC;IAC5C,WAAW,EAAE,iCAAiC;IAC9C,YAAY,EAAE,iCAAiC;
|
|
1
|
+
{"version":3,"file":"disable.js","sourceRoot":"","sources":["../../../src/eslint/checks/disable.ts"],"names":[],"mappings":"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"}
|
package/dist/eslint/index.d.ts
CHANGED
|
@@ -29,4 +29,12 @@ export { runTokenScopeCheck, judgePluginTokenScope } from "./checks/token-scope.
|
|
|
29
29
|
export type { TokenScopeReport, TokenScopeSite, TokenScopeCode } from "./checks/token-scope.js";
|
|
30
30
|
export { runSelectorFormCheck, judgeSelectorForm, SELECTOR_FORM_WHY } from "./checks/selector-form.js";
|
|
31
31
|
export type { SelectorFormReport, SelectorFormSite, SelectorFormCode } from "./checks/selector-form.js";
|
|
32
|
+
/**
|
|
33
|
+
* 🔴 E6#111b(1.32):同一纪律再加一个 —— `runCommandOwnershipCheck`(命令/协议 id 归属判据)。
|
|
34
|
+
* 壳仓只读探针 `scripts/audit-nonnaming.mjs` 用它出「声明面 / 运行时面 / 协议面」三面读数,
|
|
35
|
+
* **同样不是第二条判据路径**(`lint.ts` 的第五条腿用的就是它——同一份实现,改一处两边一起变)。
|
|
36
|
+
* ⚠️ 本格(1.32)该判据**只判黄**(`bin lint` 退出码只看 eslint severity 2),1.49 收紧为红。
|
|
37
|
+
*/
|
|
38
|
+
export { runCommandOwnershipCheck, judgeCommandId, loadHostReserved } from "./checks/command-ownership.js";
|
|
39
|
+
export type { CommandOwnershipReport, CommandIdSite, CommandIdCode, CommandIdFace, HostReservedNames, } from "./checks/command-ownership.js";
|
|
32
40
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eslint/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAClE,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACxF,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACpH,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACpF,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACvG,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/eslint/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAClE,YAAY,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACxF,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACpH,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACpF,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACvG,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAExG;;;;;GAKG;AACH,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAC3G,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,aAAa,EACb,iBAAiB,GAClB,MAAM,+BAA+B,CAAC"}
|
package/dist/eslint/index.js
CHANGED
|
@@ -24,4 +24,11 @@ export { runPluginLint, renderPluginLintReport } from "./lint.js";
|
|
|
24
24
|
export { runPluginPrefixCheck, resolvePluginIdForCss } from "./checks/plugin-prefix.js";
|
|
25
25
|
export { runTokenScopeCheck, judgePluginTokenScope } from "./checks/token-scope.js";
|
|
26
26
|
export { runSelectorFormCheck, judgeSelectorForm, SELECTOR_FORM_WHY } from "./checks/selector-form.js";
|
|
27
|
+
/**
|
|
28
|
+
* 🔴 E6#111b(1.32):同一纪律再加一个 —— `runCommandOwnershipCheck`(命令/协议 id 归属判据)。
|
|
29
|
+
* 壳仓只读探针 `scripts/audit-nonnaming.mjs` 用它出「声明面 / 运行时面 / 协议面」三面读数,
|
|
30
|
+
* **同样不是第二条判据路径**(`lint.ts` 的第五条腿用的就是它——同一份实现,改一处两边一起变)。
|
|
31
|
+
* ⚠️ 本格(1.32)该判据**只判黄**(`bin lint` 退出码只看 eslint severity 2),1.49 收紧为红。
|
|
32
|
+
*/
|
|
33
|
+
export { runCommandOwnershipCheck, judgeCommandId, loadHostReserved } from "./checks/command-ownership.js";
|
|
27
34
|
//# sourceMappingURL=index.js.map
|
package/dist/eslint/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eslint/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAElE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAExF,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eslint/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAElE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAExF,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGvG;;;;;GAKG;AACH,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC"}
|
package/dist/eslint/lint.d.ts
CHANGED
|
@@ -35,6 +35,20 @@ export interface PluginLintReport {
|
|
|
35
35
|
anchorless: number;
|
|
36
36
|
crossParty: number;
|
|
37
37
|
};
|
|
38
|
+
/** 🟡 E6#111b(1.32)命令/协议 id 归属判据的计数:三面的站点数 + 不合规站点数(**全黄**,1.49 才收紧) */
|
|
39
|
+
commandOwnershipCounts: {
|
|
40
|
+
declared: number;
|
|
41
|
+
runtime: number;
|
|
42
|
+
protocol: number;
|
|
43
|
+
bad: number;
|
|
44
|
+
};
|
|
45
|
+
/** 宿主保留面账的加载实况(账没读到 ⇒ 判据②空转——报告里必须能看出来,不许静默) */
|
|
46
|
+
hostReservedLedger: {
|
|
47
|
+
file: string;
|
|
48
|
+
found: boolean;
|
|
49
|
+
commandPrefixes: number;
|
|
50
|
+
protocolIds: number;
|
|
51
|
+
} | null;
|
|
38
52
|
}
|
|
39
53
|
export declare function runPluginLint(root: string, options?: PluginLintOptions): Promise<PluginLintReport>;
|
|
40
54
|
/** 打印报告(人机双通道的即时反馈环);返回进程退出码(真 error 才 1,WARN 永不 fail)。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/eslint/lint.ts"],"names":[],"mappings":"AA4BA,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/eslint/lint.ts"],"names":[],"mappings":"AA4BA,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAS/E,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKvD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gEAAgE;IAChE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,+DAA+D;IAC/D,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,+CAA+C;IAC/C,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,6DAA6D;IAC7D,kBAAkB,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,wEAAwE;IACxE,sBAAsB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7F,gDAAgD;IAChD,kBAAkB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC3G;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAqI5G;AAED,2DAA2D;AAC3D,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAwEvE"}
|
package/dist/eslint/lint.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `runPluginLint()`——`npm run lint` 门禁编排(E6#54d):eslint 规则腿 +
|
|
2
|
+
* `runPluginLint()`——`npm run lint` 门禁编排(E6#54d):eslint 规则腿 + 五条 check 扫描腿双轨。
|
|
3
3
|
*
|
|
4
4
|
* E6#109h-b①:`check-css-namespace` 腿升级为**双判据**——「裸定义类名/关键帧必须以本仓 `<pluginId>-`
|
|
5
5
|
* 开头」(`checks/plugin-prefix.ts`,拍板 Q1=(A),**不需要任何清单**)⊕「不得裸定义宿主保留名」
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* 规则正文见 32 号档 §一(R0–R3);1.25 实测插件侧存量 **0**(18 仓 + 夹具)⇒ 纯预防、零重发成本。
|
|
17
17
|
*
|
|
18
18
|
* 对标壳 check 同款双轨(07 §六·载体双轨):eslint(12 项注册规则,全 WARN)管 ts/tsx;
|
|
19
|
-
* css-hardcode / font-scale / spacing-grid / css-namespace
|
|
19
|
+
* css-hardcode / font-scale / spacing-grid / css-namespace / command-ownership 五条移植脚本管整工程(eslint 到不了 .css,
|
|
20
20
|
* ts/tsx 的 rgb()/hsl() 也归 css-hardcode 补)。jscpd = 项目级可选(文档引导,不进编排)。
|
|
21
21
|
*
|
|
22
22
|
* 门禁哲学(07 §六·三档):违规全 WARN **永不 fail build**——本编排按违规数统计并打印
|
|
@@ -34,6 +34,7 @@ import { runReservedClassCheck } from "./checks/reserved-classes.js";
|
|
|
34
34
|
import { runPluginPrefixCheck } from "./checks/plugin-prefix.js";
|
|
35
35
|
import { runTokenScopeCheck } from "./checks/token-scope.js";
|
|
36
36
|
import { runSelectorFormCheck } from "./checks/selector-form.js";
|
|
37
|
+
import { runCommandOwnershipCheck } from "./checks/command-ownership.js";
|
|
37
38
|
import {} from "./checks/scan.js";
|
|
38
39
|
/** 示例用的门禁 id(打印知情绕行格式);伪 id 与 check 脚本 CHECK_IDS 同源 */
|
|
39
40
|
const LEG_HINT_ID = "linkdesk/no-hardcoded-hex";
|
|
@@ -108,6 +109,17 @@ export async function runPluginLint(root, options = {}) {
|
|
|
108
109
|
* `ldk-side-panel` 的一次定义,那是轴 ① 的既有偏差、本轮不许改)⇒ 这里让前缀腿的话先说。
|
|
109
110
|
*/
|
|
110
111
|
const selectorForm = runSelectorFormCheck(absRoot);
|
|
112
|
+
/**
|
|
113
|
+
* 🔴 E6#111b(1.32):第五条 check 腿 —— **命令 id / 协议 id 归属**(`checks/command-ownership.ts`)。
|
|
114
|
+
* 三面同判 ①②:声明面(`contributes.commands[].id`)/运行时面(`registerCommand("<字面量>")`)/
|
|
115
|
+
* 协议面(`registerProtocol({ id: "<字面量>" })`)。
|
|
116
|
+
* ⚠️ **本格只判黄**(官方仓还没改名,改名归 1.42–1.48)——报点进 WARN 通道即可,
|
|
117
|
+
* `bin lint` 的退出码只看 eslint severity 2 ⇒ 对插件仓天然不构成红窗;**1.49 才收紧为红**。
|
|
118
|
+
* ⚠️ **刻意不与另几条腿去重**(与 css-namespace 内部的去重口径相反):本腿 1.49 要**独立收紧为红**,
|
|
119
|
+
* 把它的报点并进 css-namespace 腿或被那条腿吃掉,收紧时就分不清「谁在报」。fail-closed 那条与
|
|
120
|
+
* 前缀腿在 `plugin.json:1` 上会各报一次——**那是两件不同的事**(一个说身份读不到,一个说前缀拿不到)。
|
|
121
|
+
*/
|
|
122
|
+
const commandOwnership = runCommandOwnershipCheck(absRoot);
|
|
111
123
|
const prefixKeys = new Set(prefix.violations.map((v) => `${v.file}:${v.line}`));
|
|
112
124
|
const tokenKeys = new Set(tokenScope.violations.map((v) => `${v.file}:${v.line}`));
|
|
113
125
|
const formKeys = new Set(selectorForm.violations.map((v) => `${v.file}:${v.line}`));
|
|
@@ -126,8 +138,13 @@ export async function runPluginLint(root, options = {}) {
|
|
|
126
138
|
label: "check-css-namespace",
|
|
127
139
|
violations: namespace,
|
|
128
140
|
},
|
|
141
|
+
{
|
|
142
|
+
id: "linkdesk/no-unowned-command-id(命令 id / 协议 id 必须带本仓 <pluginId>. 前缀,且不得占用宿主保留面)",
|
|
143
|
+
label: "check-command-ownership",
|
|
144
|
+
violations: commandOwnership.violations,
|
|
145
|
+
},
|
|
129
146
|
];
|
|
130
|
-
const totalCheckViolations = css.length + font.length + spacing.length + namespace.length;
|
|
147
|
+
const totalCheckViolations = css.length + font.length + spacing.length + namespace.length + commandOwnership.violations.length;
|
|
131
148
|
return {
|
|
132
149
|
files: results.length,
|
|
133
150
|
eslintRows,
|
|
@@ -139,6 +156,13 @@ export async function runPluginLint(root, options = {}) {
|
|
|
139
156
|
tokenAdvisories: tokenScope.advisories,
|
|
140
157
|
tokenCounts: { red: tokenScope.red.length, yellow: tokenScope.yellow.length },
|
|
141
158
|
selectorFormCounts: { anchorless: selectorForm.anchorless.length, crossParty: selectorForm.crossParty.length },
|
|
159
|
+
commandOwnershipCounts: {
|
|
160
|
+
declared: commandOwnership.declaredIds.length,
|
|
161
|
+
runtime: commandOwnership.runtimeIds.length,
|
|
162
|
+
protocol: commandOwnership.protocolIds.length,
|
|
163
|
+
bad: commandOwnership.sites.length,
|
|
164
|
+
},
|
|
165
|
+
hostReservedLedger: commandOwnership.hostLedger,
|
|
142
166
|
};
|
|
143
167
|
}
|
|
144
168
|
/** 打印报告(人机双通道的即时反馈环);返回进程退出码(真 error 才 1,WARN 永不 fail)。 */
|
|
@@ -186,6 +210,17 @@ export function renderPluginLintReport(report) {
|
|
|
186
210
|
lines.push(`\n✅ check-css-namespace(选择器形态 · S2/S3):无锚选择器 0 / 跨方命中不带自有锚 0` +
|
|
187
211
|
`——插件 CSS 里没有「不需要同名就能撞」的选择器(元素/通配/属性/伪类/伪元素/id 一视同仁)。`);
|
|
188
212
|
}
|
|
213
|
+
// 🟡 E6#111b(1.32)命令/协议 id 归属:读数 + 账的加载实况(判据② 的输入来自账——账没读到必须让作者看见)
|
|
214
|
+
const co = report.commandOwnershipCounts;
|
|
215
|
+
lines.push(`\n🟡 check-command-ownership(命令/协议 id 归属 · 1.49 起收紧为红):` +
|
|
216
|
+
`声明面 ${co.declared} 名 / 运行时面 ${co.runtime} 名 / 协议面 ${co.protocol} 名——` +
|
|
217
|
+
(co.bad === 0
|
|
218
|
+
? `无不合规站点。`
|
|
219
|
+
: `${co.bad} 处不合规(不带本仓 <pluginId>. 前缀,或占用宿主保留面)。`));
|
|
220
|
+
if (report.hostReservedLedger && !report.hostReservedLedger.found) {
|
|
221
|
+
lines.push(` ⚠ 宿主保留面账没读到(${report.hostReservedLedger.file})——判据②(不得占用宿主保留面)本轮**空转**。` +
|
|
222
|
+
`SDK 安装不完整?重装 @linkdesk/plugin-sdk 后再跑。`);
|
|
223
|
+
}
|
|
189
224
|
lines.push(`\n门禁 = 警告不是封锁(07 §六·三档):未处理偏离可修可绕——知情绕行写标准注释\n` +
|
|
190
225
|
` // eslint-disable-next-line ${LEG_HINT_ID} -- 理由 (行级)\n` +
|
|
191
226
|
` /* eslint-disable ${LEG_HINT_ID} -- 内容画布 */ (文件级:内容/画布整文件豁免)\n` +
|
package/dist/eslint/lint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/eslint/lint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAA0B,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAuB,MAAM,kBAAkB,CAAC;AAEvD,uDAAuD;AACvD,MAAM,WAAW,GAAG,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/eslint/lint.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@linkdesk/plugin-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.29",
|
|
4
4
|
"description": "@linkdesk/plugin-sdk——LinkDesk 插件作者 SDK(对标 @types/vscode):window.linkdesk.* 类型 + 一键 build(.linkdesk-plugin) + dev 宿主 + plugin.json 验证 + eslint 门禁(E6#54d)。作者 npm i 后零壳源码依赖。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "宿主保留面账(生成式·定稿 E6#111b/1.32)——插件不得占用这些名字;改动本账 = 一次公共面决策,改完壳仓命令/设置/协议面必须重跑 scripts/gen-host-reserved.mjs(npm run audit:plugin-scope:regen)。",
|
|
3
|
+
"commandPrefixes": [
|
|
4
|
+
"app.",
|
|
5
|
+
"core.",
|
|
6
|
+
"theme.",
|
|
7
|
+
"update.",
|
|
8
|
+
"view.",
|
|
9
|
+
"workbench."
|
|
10
|
+
],
|
|
11
|
+
"configKeys": [
|
|
12
|
+
"app.accentColor",
|
|
13
|
+
"app.accentMode",
|
|
14
|
+
"app.accentSource",
|
|
15
|
+
"app.appearanceMode",
|
|
16
|
+
"app.backgroundImage",
|
|
17
|
+
"app.backgroundMask",
|
|
18
|
+
"app.backgroundOpacity",
|
|
19
|
+
"app.fontFamily",
|
|
20
|
+
"app.fontFamilyMono",
|
|
21
|
+
"app.fontTone",
|
|
22
|
+
"app.glassBlur",
|
|
23
|
+
"app.glassOpacity",
|
|
24
|
+
"app.glassSaturate",
|
|
25
|
+
"app.glassTint",
|
|
26
|
+
"app.iconTheme",
|
|
27
|
+
"app.mixBackground",
|
|
28
|
+
"app.mixFont",
|
|
29
|
+
"app.mixMode",
|
|
30
|
+
"app.mixReset",
|
|
31
|
+
"app.surfaceRadius",
|
|
32
|
+
"app.theme",
|
|
33
|
+
"app.themeColor",
|
|
34
|
+
"app.uiFontScale",
|
|
35
|
+
"app.update.mode",
|
|
36
|
+
"app.update.showReleaseNotes",
|
|
37
|
+
"app.zoneBackgroundImage",
|
|
38
|
+
"app.zoneRadius",
|
|
39
|
+
"app.zoneRadiusScale"
|
|
40
|
+
],
|
|
41
|
+
"pseudoPluginIds": [
|
|
42
|
+
"app",
|
|
43
|
+
"appearance",
|
|
44
|
+
"update"
|
|
45
|
+
],
|
|
46
|
+
"contextKeys": [
|
|
47
|
+
"activeEditor",
|
|
48
|
+
"editorCount",
|
|
49
|
+
"editorHasSelection",
|
|
50
|
+
"inputFocus",
|
|
51
|
+
"settingFollowTheme",
|
|
52
|
+
"settingKey",
|
|
53
|
+
"settingModified",
|
|
54
|
+
"settingResetsToDefault",
|
|
55
|
+
"sidebarPosition",
|
|
56
|
+
"updateActionable",
|
|
57
|
+
"updateButtonLabel"
|
|
58
|
+
],
|
|
59
|
+
"appearanceIds": [
|
|
60
|
+
"dark",
|
|
61
|
+
"dark-fallback",
|
|
62
|
+
"light"
|
|
63
|
+
],
|
|
64
|
+
"protocolIds": [
|
|
65
|
+
"bracket"
|
|
66
|
+
]
|
|
67
|
+
}
|