@phoenix-wing/code-core 0.5.0 → 0.5.1
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/README.md +3 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/pnwCodeIgnore.d.ts +26 -0
- package/dist/pnwCodeIgnore.d.ts.map +1 -0
- package/dist/pnwCodeIgnore.js +115 -0
- package/dist/pnwCodeIgnore.js.map +1 -0
- package/dist/pnwCodeRenamePlan.d.ts.map +1 -1
- package/dist/pnwCodeRenamePlan.js +9 -16
- package/dist/pnwCodeRenamePlan.js.map +1 -1
- package/dist/pnwCodeReplacementRules.d.ts +40 -0
- package/dist/pnwCodeReplacementRules.d.ts.map +1 -0
- package/dist/pnwCodeReplacementRules.js +87 -0
- package/dist/pnwCodeReplacementRules.js.map +1 -0
- package/dist/ui/PnwCodeRenameResultsPanel.d.ts +40 -0
- package/dist/ui/PnwCodeRenameResultsPanel.d.ts.map +1 -0
- package/dist/ui/PnwCodeRenameResultsPanel.js +120 -0
- package/dist/ui/PnwCodeRenameResultsPanel.js.map +1 -0
- package/dist/ui/PnwCodeRenameResultsState.d.ts +59 -0
- package/dist/ui/PnwCodeRenameResultsState.d.ts.map +1 -0
- package/dist/ui/PnwCodeRenameResultsState.js +87 -0
- package/dist/ui/PnwCodeRenameResultsState.js.map +1 -0
- package/dist/ui/PnwCodeReorderMembersPanel.d.ts +38 -0
- package/dist/ui/PnwCodeReorderMembersPanel.d.ts.map +1 -0
- package/dist/ui/PnwCodeReorderMembersPanel.js +216 -0
- package/dist/ui/PnwCodeReorderMembersPanel.js.map +1 -0
- package/dist/ui/PnwCodeReorderMembersPanelState.d.ts +57 -0
- package/dist/ui/PnwCodeReorderMembersPanelState.d.ts.map +1 -0
- package/dist/ui/PnwCodeReorderMembersPanelState.js +71 -0
- package/dist/ui/PnwCodeReorderMembersPanelState.js.map +1 -0
- package/dist/ui/PnwCodeUuidResultsPanel.d.ts +63 -0
- package/dist/ui/PnwCodeUuidResultsPanel.d.ts.map +1 -0
- package/dist/ui/PnwCodeUuidResultsPanel.js +193 -0
- package/dist/ui/PnwCodeUuidResultsPanel.js.map +1 -0
- package/dist/ui/PnwCodeUuidResultsState.d.ts +47 -0
- package/dist/ui/PnwCodeUuidResultsState.d.ts.map +1 -0
- package/dist/ui/PnwCodeUuidResultsState.js +84 -0
- package/dist/ui/PnwCodeUuidResultsState.js.map +1 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +6 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/model.d.ts +4 -0
- package/dist/ui/model.d.ts.map +1 -0
- package/dist/ui/model.js +5 -0
- package/dist/ui/model.js.map +1 -0
- package/package.json +9 -1
- package/src/fixtures/pnx_bom_analysis_cmd_min.cpp +42 -2
- package/src/fixtures/pnx_bom_analysis_param_min.h +19 -3
- package/src/index.ts +24 -0
package/README.md
CHANGED
|
@@ -7,9 +7,11 @@ Phoenix Code 可跨宿主复用的纯 TypeScript 算法与数据契约。包内
|
|
|
7
7
|
- C++ 实现文件与头文件成员排序、锁定区保护;
|
|
8
8
|
- UUID/GUID/CAA GUID 识别、花括号/大小写/布局保持、替换计划与纯文本 apply;
|
|
9
9
|
- Code Rename 计划与纯文本 apply;
|
|
10
|
+
- Phoenix Ignore 子集的规则解析、大小写策略、路径/名称/目录匹配;
|
|
11
|
+
- 搜索替换规则校验、去重/冲突检测、最长匹配、文本行号与名称建议;
|
|
10
12
|
- 工作集 Schema,以及 workspace 相对路径规范化、去重、文件/目录匹配、包含和 roots 相对化;
|
|
11
13
|
- CAA 工程环境和对话框 handoff 数据契约;
|
|
12
|
-
-
|
|
14
|
+
- 跨宿主文件、成员排序、UUID 与搜索替换结果 ViewModel;成员排序、UUID 与搜索替换另提供 Host-neutral Web Components。
|
|
13
15
|
|
|
14
16
|
`kt-auto-code` 与 Desk Tools 应直接消费本包。旧 `phoenix-wing/code-core` subpath 仅保留兼容 re-export,不再持有算法真源。
|
|
15
17
|
|
package/dist/index.d.ts
CHANGED
|
@@ -8,4 +8,6 @@ export { type PnwCodeRenameChange, type PnwCodeRenameEntry, type PnwCodeRenameLe
|
|
|
8
8
|
export { type PnwWorkset, type PnwWorksetDocument, type PnwWorksetParseResult, pnwIsSafeWorkspacePath, pnwParseWorksetDocument, } from "./pnwWorkset.js";
|
|
9
9
|
export { type PnwWorkspacePathEntry, pnwIsWorkspacePathWithin, pnwMatchesWorkspacePath, pnwNormalizeWorkspacePath, pnwNormalizeWorkspacePaths, pnwRelativeToWorkspaceRoots, } from "./pnwWorkspacePath.js";
|
|
10
10
|
export { type PnwCaaEnvironment, type PnwCaaEnvironmentKey, type PnwCaaEnvironmentSource, type PnwCaaEnvironmentValue, pnwResolveCaaEnvironment, } from "./pnwCaaEnvironment.js";
|
|
11
|
+
export { type PnwCodeIgnoreMatchOptions, type PnwCodeIgnoreNameOptions, type PnwCodeIgnoreNormalizeOptions, pnwCodeIsIgnoredName, pnwCodeIsIgnoredPath, pnwCodeNormalizeIgnorePatterns, pnwCodeParseIgnoreText, pnwCodeShouldSkipDirName, } from "./pnwCodeIgnore.js";
|
|
12
|
+
export { type PnwCodeNameReplacementSuggestion, type PnwCodeReplacementRule, type PnwCodeResolvedReplacementRule, type PnwCodeRuleMatchSummary, type PnwCodeStringReplacement, type PnwCodeTextReplacement, pnwCodeReplaceStringByRules, pnwCodeReplaceTextByRules, pnwCodeResolveReplacementRules, pnwCodeSuggestNameReplacement, } from "./pnwCodeReplacementRules.js";
|
|
11
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,8BAA8B,EAC9B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,SAAS,EACT,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,KAAK,qBAAqB,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,wBAAwB,GACzB,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,8BAA8B,EAC9B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,SAAS,EACT,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,KAAK,qBAAqB,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,6BAA6B,EAClC,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B,EAC9B,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,KAAK,gCAAgC,EACrC,KAAK,sBAAsB,EAC3B,KAAK,8BAA8B,EACnC,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,2BAA2B,EAC3B,yBAAyB,EACzB,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,8BAA8B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,4 +8,6 @@ export { pnwApplyCodeRenameText, pnwPlanCodeRename, } from "./pnwCodeRenamePlan.
|
|
|
8
8
|
export { pnwIsSafeWorkspacePath, pnwParseWorksetDocument, } from "./pnwWorkset.js";
|
|
9
9
|
export { pnwIsWorkspacePathWithin, pnwMatchesWorkspacePath, pnwNormalizeWorkspacePath, pnwNormalizeWorkspacePaths, pnwRelativeToWorkspaceRoots, } from "./pnwWorkspacePath.js";
|
|
10
10
|
export { pnwResolveCaaEnvironment, } from "./pnwCaaEnvironment.js";
|
|
11
|
+
export { pnwCodeIsIgnoredName, pnwCodeIsIgnoredPath, pnwCodeNormalizeIgnorePatterns, pnwCodeParseIgnoreText, pnwCodeShouldSkipDirName, } from "./pnwCodeIgnore.js";
|
|
12
|
+
export { pnwCodeReplaceStringByRules, pnwCodeReplaceTextByRules, pnwCodeResolveReplacementRules, pnwCodeSuggestNameReplacement, } from "./pnwCodeReplacementRules.js";
|
|
11
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAIL,8BAA8B,EAC9B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAML,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAIL,sBAAsB,EACtB,wBAAwB,EACxB,SAAS,EACT,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAEtB,OAAO,EAQL,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAGL,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAML,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAIL,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAEL,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAKL,wBAAwB,GACzB,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAIL,8BAA8B,EAC9B,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAML,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAIL,sBAAsB,EACtB,wBAAwB,EACxB,SAAS,EACT,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAEtB,OAAO,EAQL,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAGL,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAML,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAIL,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAEL,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAKL,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAIL,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B,EAC9B,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAOL,2BAA2B,EAC3B,yBAAyB,EACzB,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type PnwCodeIgnoreMatchOptions = {
|
|
2
|
+
/** Match case exactly. Defaults to true so POSIX-style workspace paths stay precise. */
|
|
3
|
+
caseSensitive?: boolean;
|
|
4
|
+
};
|
|
5
|
+
export type PnwCodeIgnoreNormalizeOptions = PnwCodeIgnoreMatchOptions & {
|
|
6
|
+
/** Remove repeated rules while preserving the first spelling and order. */
|
|
7
|
+
dedupe?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export type PnwCodeIgnoreNameOptions = PnwCodeIgnoreMatchOptions & {
|
|
10
|
+
/** Treat every dot-prefixed entry as ignored independently of configured rules. */
|
|
11
|
+
ignoreHidden?: boolean;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Normalize ignore rule lines without assigning any storage or Host semantics.
|
|
15
|
+
* Blank lines and comments are removed. Negation rules are deliberately not
|
|
16
|
+
* interpreted: the shared contract is the existing Phoenix ignore subset.
|
|
17
|
+
*/
|
|
18
|
+
export declare function pnwCodeNormalizeIgnorePatterns(patterns: readonly string[], options?: PnwCodeIgnoreNormalizeOptions): string[];
|
|
19
|
+
export declare function pnwCodeParseIgnoreText(text: string, options?: PnwCodeIgnoreNormalizeOptions): string[];
|
|
20
|
+
/** Match a workspace-relative path against the shared Phoenix ignore subset. */
|
|
21
|
+
export declare function pnwCodeIsIgnoredPath(relativePath: string, patterns: readonly string[], options?: PnwCodeIgnoreMatchOptions): boolean;
|
|
22
|
+
/** Match one directory entry while pruning a traversal. */
|
|
23
|
+
export declare function pnwCodeShouldSkipDirName(dirName: string, patterns: readonly string[], options?: PnwCodeIgnoreMatchOptions): boolean;
|
|
24
|
+
/** Match a single filesystem entry name, with optional hidden-entry policy. */
|
|
25
|
+
export declare function pnwCodeIsIgnoredName(name: string, patterns: readonly string[], options?: PnwCodeIgnoreNameOptions): boolean;
|
|
26
|
+
//# sourceMappingURL=pnwCodeIgnore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnwCodeIgnore.d.ts","sourceRoot":"","sources":["../src/pnwCodeIgnore.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GAAG;IACtC,wFAAwF;IACxF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,yBAAyB,GAAG;IACtE,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,yBAAyB,GAAG;IACjE,mFAAmF;IACnF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AA0CF;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,OAAO,GAAE,6BAAkC,GAC1C,MAAM,EAAE,CAeV;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,6BAAkC,GAC1C,MAAM,EAAE,CAEV;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,OAAO,GAAE,yBAA8B,GACtC,OAAO,CA2BT;AAED,2DAA2D;AAC3D,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAeT;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAGT"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
function normalizePath(value) {
|
|
2
|
+
return value.replace(/\\/g, "/").replace(/^\.\//, "");
|
|
3
|
+
}
|
|
4
|
+
function comparisonKey(value, caseSensitive) {
|
|
5
|
+
return caseSensitive ? value : value.toLocaleLowerCase("en-US");
|
|
6
|
+
}
|
|
7
|
+
function globToRegExp(pattern, caseSensitive) {
|
|
8
|
+
let normalized = normalizePath(pattern);
|
|
9
|
+
if (normalized.startsWith("/"))
|
|
10
|
+
normalized = normalized.slice(1);
|
|
11
|
+
const escaped = normalized
|
|
12
|
+
.replace(/[.+^${}()|[\]\\]/g, "\\$&")
|
|
13
|
+
.replace(/\*\*/g, "{{GLOBSTAR}}")
|
|
14
|
+
.replace(/\*/g, "[^/]*")
|
|
15
|
+
.replace(/\?/g, "[^/]")
|
|
16
|
+
.replace(/\{\{GLOBSTAR\}\}/g, ".*");
|
|
17
|
+
return new RegExp(`^${escaped}$`, caseSensitive ? "" : "i");
|
|
18
|
+
}
|
|
19
|
+
function hasGlob(value) {
|
|
20
|
+
return value.includes("*") || value.includes("?");
|
|
21
|
+
}
|
|
22
|
+
function matchesDirectoryRule(relativePath, dirPattern, caseSensitive) {
|
|
23
|
+
if (hasGlob(dirPattern)) {
|
|
24
|
+
const matcher = globToRegExp(dirPattern, caseSensitive);
|
|
25
|
+
return relativePath.split("/").some((part) => matcher.test(part));
|
|
26
|
+
}
|
|
27
|
+
const pathKey = comparisonKey(relativePath, caseSensitive);
|
|
28
|
+
const patternKey = comparisonKey(dirPattern, caseSensitive);
|
|
29
|
+
return pathKey === patternKey
|
|
30
|
+
|| pathKey.startsWith(`${patternKey}/`)
|
|
31
|
+
|| pathKey.split("/").includes(patternKey);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Normalize ignore rule lines without assigning any storage or Host semantics.
|
|
35
|
+
* Blank lines and comments are removed. Negation rules are deliberately not
|
|
36
|
+
* interpreted: the shared contract is the existing Phoenix ignore subset.
|
|
37
|
+
*/
|
|
38
|
+
export function pnwCodeNormalizeIgnorePatterns(patterns, options = {}) {
|
|
39
|
+
const caseSensitive = options.caseSensitive !== false;
|
|
40
|
+
const result = [];
|
|
41
|
+
const seen = new Set();
|
|
42
|
+
for (const raw of patterns) {
|
|
43
|
+
const pattern = String(raw ?? "").trim();
|
|
44
|
+
if (!pattern || pattern.startsWith("#"))
|
|
45
|
+
continue;
|
|
46
|
+
if (options.dedupe) {
|
|
47
|
+
const key = comparisonKey(pattern, caseSensitive);
|
|
48
|
+
if (seen.has(key))
|
|
49
|
+
continue;
|
|
50
|
+
seen.add(key);
|
|
51
|
+
}
|
|
52
|
+
result.push(pattern);
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
export function pnwCodeParseIgnoreText(text, options = {}) {
|
|
57
|
+
return pnwCodeNormalizeIgnorePatterns(text.split(/\r?\n/), options);
|
|
58
|
+
}
|
|
59
|
+
/** Match a workspace-relative path against the shared Phoenix ignore subset. */
|
|
60
|
+
export function pnwCodeIsIgnoredPath(relativePath, patterns, options = {}) {
|
|
61
|
+
if (patterns.length === 0)
|
|
62
|
+
return false;
|
|
63
|
+
const caseSensitive = options.caseSensitive !== false;
|
|
64
|
+
const normalizedPath = normalizePath(relativePath);
|
|
65
|
+
const base = normalizedPath.split("/").pop() ?? normalizedPath;
|
|
66
|
+
const pathKey = comparisonKey(normalizedPath, caseSensitive);
|
|
67
|
+
const baseKey = comparisonKey(base, caseSensitive);
|
|
68
|
+
for (const raw of patterns) {
|
|
69
|
+
const pattern = normalizePath(String(raw ?? "").trim());
|
|
70
|
+
if (!pattern || pattern.startsWith("#"))
|
|
71
|
+
continue;
|
|
72
|
+
if (pattern.endsWith("/")) {
|
|
73
|
+
if (matchesDirectoryRule(normalizedPath, pattern.slice(0, -1), caseSensitive))
|
|
74
|
+
return true;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (hasGlob(pattern)) {
|
|
78
|
+
const matcher = globToRegExp(pattern, caseSensitive);
|
|
79
|
+
if (matcher.test(normalizedPath) || matcher.test(base))
|
|
80
|
+
return true;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const patternKey = comparisonKey(pattern, caseSensitive);
|
|
84
|
+
if (pathKey === patternKey || pathKey.endsWith(`/${patternKey}`) || baseKey === patternKey)
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
/** Match one directory entry while pruning a traversal. */
|
|
90
|
+
export function pnwCodeShouldSkipDirName(dirName, patterns, options = {}) {
|
|
91
|
+
const caseSensitive = options.caseSensitive !== false;
|
|
92
|
+
const nameKey = comparisonKey(normalizePath(dirName), caseSensitive);
|
|
93
|
+
for (const raw of patterns) {
|
|
94
|
+
const pattern = normalizePath(String(raw ?? "").trim());
|
|
95
|
+
if (!pattern.endsWith("/"))
|
|
96
|
+
continue;
|
|
97
|
+
const directoryPattern = pattern.slice(0, -1);
|
|
98
|
+
if (hasGlob(directoryPattern)) {
|
|
99
|
+
if (globToRegExp(directoryPattern, caseSensitive).test(dirName))
|
|
100
|
+
return true;
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const patternKey = comparisonKey(directoryPattern, caseSensitive);
|
|
104
|
+
if (nameKey === patternKey || patternKey.endsWith(`/${nameKey}`))
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
/** Match a single filesystem entry name, with optional hidden-entry policy. */
|
|
110
|
+
export function pnwCodeIsIgnoredName(name, patterns, options = {}) {
|
|
111
|
+
if (options.ignoreHidden && name.startsWith("."))
|
|
112
|
+
return true;
|
|
113
|
+
return pnwCodeIsIgnoredPath(name, patterns, options);
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=pnwCodeIgnore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnwCodeIgnore.js","sourceRoot":"","sources":["../src/pnwCodeIgnore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pnwCodeRenamePlan.d.ts","sourceRoot":"","sources":["../src/pnwCodeRenamePlan.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAChD,gFAAgF;IAChF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACjD,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1J,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,OAAO,EAAE,oBAAoB,GAC5B,iBAAiB,
|
|
1
|
+
{"version":3,"file":"pnwCodeRenamePlan.d.ts","sourceRoot":"","sources":["../src/pnwCodeRenamePlan.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAChD,gFAAgF;IAChF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACjD,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1J,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,OAAO,EAAE,oBAAoB,GAC5B,iBAAiB,CA0DnB;AAED,kFAAkF;AAClF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAI7F"}
|
|
@@ -21,13 +21,14 @@ export function pnwPlanCodeRename(entries, options) {
|
|
|
21
21
|
return pnwEmptyRenamePlan(oldText, newText, levels, diagnostics);
|
|
22
22
|
const changes = [];
|
|
23
23
|
if (levels.includes("text")) {
|
|
24
|
+
const rules = pnwCodeResolveReplacementRules([{ id: "primary", search: oldText, replace: newText }]);
|
|
24
25
|
for (const entry of normalizedEntries) {
|
|
25
26
|
if (entry.kind !== "file" || entry.text === undefined)
|
|
26
27
|
continue;
|
|
27
|
-
const
|
|
28
|
-
if (!occurrences)
|
|
28
|
+
const replacement = pnwCodeReplaceTextByRules(entry.text, rules);
|
|
29
|
+
if (!replacement.occurrences)
|
|
29
30
|
continue;
|
|
30
|
-
changes.push({ level: "text", relativePath: entry.relativePath, occurrences, lines:
|
|
31
|
+
changes.push({ level: "text", relativePath: entry.relativePath, occurrences: replacement.occurrences, lines: replacement.lines, status: "preview" });
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
const pathChanges = [];
|
|
@@ -70,7 +71,10 @@ export function pnwPlanCodeRename(entries, options) {
|
|
|
70
71
|
}
|
|
71
72
|
/** Applies only literal text changes after a host has accepted a preview plan. */
|
|
72
73
|
export function pnwApplyCodeRenameText(text, oldText, newText) {
|
|
73
|
-
|
|
74
|
+
if (!oldText)
|
|
75
|
+
return text;
|
|
76
|
+
const rules = pnwCodeResolveReplacementRules([{ id: "primary", search: oldText, replace: newText }]);
|
|
77
|
+
return pnwCodeReplaceTextByRules(text, rules).output;
|
|
74
78
|
}
|
|
75
79
|
function pnwEmptyRenamePlan(oldText, newText, levels, diagnostics) {
|
|
76
80
|
return { valid: false, oldText, newText, levels, changes: [], summary: { dirs: 0, files: 0, textFiles: 0, occurrences: 0, conflicts: 0 }, diagnostics };
|
|
@@ -89,17 +93,6 @@ function pnwRenameBasename(path, oldText, newText) {
|
|
|
89
93
|
const base = path.slice(slash + 1);
|
|
90
94
|
return base === oldText ? `${slash < 0 ? "" : `${path.slice(0, slash + 1)}`}${newText}` : undefined;
|
|
91
95
|
}
|
|
92
|
-
function pnwCountOccurrences(text, needle) {
|
|
93
|
-
let count = 0;
|
|
94
|
-
let offset = 0;
|
|
95
|
-
while ((offset = text.indexOf(needle, offset)) >= 0) {
|
|
96
|
-
count += 1;
|
|
97
|
-
offset += needle.length;
|
|
98
|
-
}
|
|
99
|
-
return count;
|
|
100
|
-
}
|
|
101
|
-
function pnwHitLines(text, needle) {
|
|
102
|
-
return text.split(/\r?\n/).flatMap((line, index) => line.includes(needle) ? [index + 1] : []);
|
|
103
|
-
}
|
|
104
96
|
function pnwRenameLevelOrder(level) { return level === "dir" ? 0 : level === "file" ? 1 : 2; }
|
|
97
|
+
import { pnwCodeReplaceTextByRules, pnwCodeResolveReplacementRules, } from "./pnwCodeReplacementRules.js";
|
|
105
98
|
//# sourceMappingURL=pnwCodeRenamePlan.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pnwCodeRenamePlan.js","sourceRoot":"","sources":["../src/pnwCodeRenamePlan.ts"],"names":[],"mappings":"AAqCA;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAsC,EACtC,OAA6B;IAE7B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;QAAE,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,OAAO,KAAK,OAAO;QAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACtF,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,wBAAwB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7H,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAAE,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtH,IAAI,WAAW,CAAC,MAAM;QAAE,OAAO,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAEzF,MAAM,OAAO,GAA0B,EAAE,CAAC;IAC1C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;gBAAE,SAAS;YAChE,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"pnwCodeRenamePlan.js","sourceRoot":"","sources":["../src/pnwCodeRenamePlan.ts"],"names":[],"mappings":"AAqCA;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAsC,EACtC,OAA6B;IAE7B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;QAAE,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,OAAO,KAAK,OAAO;QAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACtF,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,wBAAwB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7H,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAAE,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtH,IAAI,WAAW,CAAC,MAAM;QAAE,OAAO,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAEzF,MAAM,OAAO,GAA0B,EAAE,CAAC;IAC1C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,8BAA8B,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACrG,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;gBAAE,SAAS;YAChE,MAAM,WAAW,GAAG,yBAAyB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACjE,IAAI,CAAC,WAAW,CAAC,WAAW;gBAAE,SAAS;YACvC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACvJ,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAA0B,EAAE,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,CAAC,KAAK,EAAE,MAAM,CAAU,EAAE,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QACtC,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,IAAI;gBAAE,SAAS;YAChE,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3E,IAAI,CAAC,UAAU;gBAAE,SAAS;YAC1B,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/G,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,kBAAkB,KAAK,KAAK,CAAC;IAC3D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1G,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,UAAW,EAAE,aAAa,CAAC,CAAC;QAC1D,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,UAAW,EAAE,aAAa,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,SAAS,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChH,OAAO,CAAC,IAAI,CAAC,QAAQ;YACnB,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,cAAc,MAAM,CAAC,UAAU,EAAE,EAAE;YACvI,CAAC,CAAC,MAAM,CAAC,CAAC;IACd,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IACzJ,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QAC9F,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QAChG,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QACpG,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjH,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM;KAC3E,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAClF,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,OAAe,EAAE,OAAe;IACnF,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,KAAK,GAAG,8BAA8B,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACrG,OAAO,yBAAyB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC;AACvD,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe,EAAE,OAAe,EAAE,MAAqC,EAAE,WAA8B;IACjI,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC;AAC1J,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAiD;IACjF,MAAM,OAAO,GAAkC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,EAA+B,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IACvG,MAAM,QAAQ,GAAkC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAa,IAAY,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACnH,SAAS,qBAAqB,CAAC,KAAa,IAAa,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/I,SAAS,UAAU,CAAC,KAAa,EAAE,aAAsB,IAAY,OAAO,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;AAChI,SAAS,iBAAiB,CAAC,IAAY,EAAE,OAAe,EAAE,OAAe;IACvE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACnC,OAAO,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACtG,CAAC;AACD,SAAS,mBAAmB,CAAC,KAAyB,IAAY,OAAO,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1H,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export interface PnwCodeReplacementRule {
|
|
2
|
+
readonly id?: string;
|
|
3
|
+
readonly search: string;
|
|
4
|
+
readonly replace: string;
|
|
5
|
+
readonly enabled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface PnwCodeResolvedReplacementRule {
|
|
8
|
+
readonly id: string;
|
|
9
|
+
readonly search: string;
|
|
10
|
+
readonly replace: string;
|
|
11
|
+
readonly sourceIndex: number;
|
|
12
|
+
readonly derived: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface PnwCodeRuleMatchSummary {
|
|
15
|
+
readonly ruleId: string;
|
|
16
|
+
readonly search: string;
|
|
17
|
+
readonly replace: string;
|
|
18
|
+
readonly occurrences: number;
|
|
19
|
+
}
|
|
20
|
+
export interface PnwCodeStringReplacement {
|
|
21
|
+
readonly output: string;
|
|
22
|
+
readonly matches: readonly PnwCodeRuleMatchSummary[];
|
|
23
|
+
}
|
|
24
|
+
export interface PnwCodeTextReplacement extends PnwCodeStringReplacement {
|
|
25
|
+
readonly occurrences: number;
|
|
26
|
+
readonly lines: readonly number[];
|
|
27
|
+
}
|
|
28
|
+
export interface PnwCodeNameReplacementSuggestion {
|
|
29
|
+
readonly currentName: string;
|
|
30
|
+
readonly suggestedName: string;
|
|
31
|
+
readonly matches: readonly PnwCodeRuleMatchSummary[];
|
|
32
|
+
}
|
|
33
|
+
/** Validates, derives and de-duplicates ordered literal replacement rules. */
|
|
34
|
+
export declare function pnwCodeResolveReplacementRules(rules: readonly PnwCodeReplacementRule[], preserveUpperCase?: boolean): readonly PnwCodeResolvedReplacementRule[];
|
|
35
|
+
/** Applies ordered literal rules; at each offset the longest matching search wins. */
|
|
36
|
+
export declare function pnwCodeReplaceStringByRules(input: string, rules: readonly PnwCodeResolvedReplacementRule[]): PnwCodeStringReplacement;
|
|
37
|
+
/** Adds stable one-based line projections for result UIs without doing file IO. */
|
|
38
|
+
export declare function pnwCodeReplaceTextByRules(input: string, rules: readonly PnwCodeResolvedReplacementRule[]): PnwCodeTextReplacement;
|
|
39
|
+
export declare function pnwCodeSuggestNameReplacement(currentName: string, rules: readonly PnwCodeReplacementRule[], preserveUpperCase?: boolean): PnwCodeNameReplacementSuggestion | undefined;
|
|
40
|
+
//# sourceMappingURL=pnwCodeReplacementRules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnwCodeReplacementRules.d.ts","sourceRoot":"","sources":["../src/pnwCodeReplacementRules.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AACD,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACvE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CACzD;AACD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC1G;AACD,MAAM,WAAW,wBAAwB;IAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,uBAAuB,EAAE,CAAC;CAAE;AAC5H,MAAM,WAAW,sBAAuB,SAAQ,wBAAwB;IAAG,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAAE;AAC7I,MAAM,WAAW,gCAAgC;IAAG,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,uBAAuB,EAAE,CAAC;CAAE;AAEzK,8EAA8E;AAC9E,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,SAAS,sBAAsB,EAAE,EACxC,iBAAiB,UAAQ,GACxB,SAAS,8BAA8B,EAAE,CAmB3C;AAED,sFAAsF;AACtF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,8BAA8B,EAAE,GAAG,wBAAwB,CAQrI;AAED,mFAAmF;AACnF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,8BAA8B,EAAE,GAAG,sBAAsB,CASjI;AAED,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,SAAS,sBAAsB,EAAE,EACxC,iBAAiB,UAAQ,GACxB,gCAAgC,GAAG,SAAS,CAK9C"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/** Validates, derives and de-duplicates ordered literal replacement rules. */
|
|
3
|
+
export function pnwCodeResolveReplacementRules(rules, preserveUpperCase = false) {
|
|
4
|
+
const explicit = rules.map((rule, sourceIndex) => ({ rule, sourceIndex }))
|
|
5
|
+
.filter(({ rule }) => rule.enabled !== false && rule.search.length > 0)
|
|
6
|
+
.map(({ rule, sourceIndex }) => ({ id: rule.id ?? `rule-${sourceIndex + 1}`, search: rule.search, replace: rule.replace, sourceIndex, derived: false }));
|
|
7
|
+
if (!explicit.length)
|
|
8
|
+
throw new Error("至少需要一条非空搜索规则");
|
|
9
|
+
if (explicit.some((rule) => rule.search === rule.replace))
|
|
10
|
+
throw new Error("搜索内容与替换内容不能相同");
|
|
11
|
+
const all = [...explicit];
|
|
12
|
+
if (preserveUpperCase)
|
|
13
|
+
for (const rule of explicit) {
|
|
14
|
+
const search = rule.search.toUpperCase();
|
|
15
|
+
const replace = rule.replace.toUpperCase();
|
|
16
|
+
if (search !== rule.search)
|
|
17
|
+
all.push({ ...rule, id: `${rule.id}:upper`, search, replace, derived: true });
|
|
18
|
+
}
|
|
19
|
+
const deduped = [];
|
|
20
|
+
const bySearch = new Map();
|
|
21
|
+
for (const rule of all) {
|
|
22
|
+
const existing = bySearch.get(rule.search);
|
|
23
|
+
if (existing) {
|
|
24
|
+
if (existing.replace !== rule.replace)
|
|
25
|
+
throw new Error(`搜索规则冲突:${rule.search}`);
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
bySearch.set(rule.search, rule);
|
|
29
|
+
deduped.push(rule);
|
|
30
|
+
}
|
|
31
|
+
return deduped;
|
|
32
|
+
}
|
|
33
|
+
/** Applies ordered literal rules; at each offset the longest matching search wins. */
|
|
34
|
+
export function pnwCodeReplaceStringByRules(input, rules) {
|
|
35
|
+
let output = "";
|
|
36
|
+
let offset = 0;
|
|
37
|
+
const counts = new Map();
|
|
38
|
+
while (offset < input.length) {
|
|
39
|
+
const winner = winningRule(input, offset, rules);
|
|
40
|
+
if (!winner) {
|
|
41
|
+
output += input[offset];
|
|
42
|
+
offset += 1;
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
output += winner.replace;
|
|
46
|
+
counts.set(winner.id, (counts.get(winner.id) ?? 0) + 1);
|
|
47
|
+
offset += winner.search.length;
|
|
48
|
+
}
|
|
49
|
+
return { output, matches: summaries(rules, counts) };
|
|
50
|
+
}
|
|
51
|
+
/** Adds stable one-based line projections for result UIs without doing file IO. */
|
|
52
|
+
export function pnwCodeReplaceTextByRules(input, rules) {
|
|
53
|
+
const replaced = pnwCodeReplaceStringByRules(input, rules);
|
|
54
|
+
const lines = [];
|
|
55
|
+
let line = 1;
|
|
56
|
+
let offset = 0;
|
|
57
|
+
while (offset < input.length) {
|
|
58
|
+
const winner = winningRule(input, offset, rules);
|
|
59
|
+
if (winner) {
|
|
60
|
+
if (lines.at(-1) !== line)
|
|
61
|
+
lines.push(line);
|
|
62
|
+
offset += winner.search.length;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (input[offset] === "\n")
|
|
66
|
+
line += 1;
|
|
67
|
+
offset += 1;
|
|
68
|
+
}
|
|
69
|
+
return { ...replaced, occurrences: replaced.matches.reduce((total, match) => total + match.occurrences, 0), lines };
|
|
70
|
+
}
|
|
71
|
+
export function pnwCodeSuggestNameReplacement(currentName, rules, preserveUpperCase = false) {
|
|
72
|
+
const replacement = pnwCodeReplaceStringByRules(currentName, pnwCodeResolveReplacementRules(rules, preserveUpperCase));
|
|
73
|
+
return !replacement.matches.length || replacement.output === currentName
|
|
74
|
+
? undefined
|
|
75
|
+
: { currentName, suggestedName: replacement.output, matches: replacement.matches };
|
|
76
|
+
}
|
|
77
|
+
function winningRule(input, offset, rules) {
|
|
78
|
+
let winner;
|
|
79
|
+
for (const rule of rules)
|
|
80
|
+
if (input.startsWith(rule.search, offset) && (!winner || rule.search.length > winner.search.length))
|
|
81
|
+
winner = rule;
|
|
82
|
+
return winner;
|
|
83
|
+
}
|
|
84
|
+
function summaries(rules, counts) {
|
|
85
|
+
return rules.filter((rule) => (counts.get(rule.id) ?? 0) > 0).map((rule) => ({ ruleId: rule.id, search: rule.search, replace: rule.replace, occurrences: counts.get(rule.id) ?? 0 }));
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=pnwCodeReplacementRules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pnwCodeReplacementRules.js","sourceRoot":"","sources":["../src/pnwCodeReplacementRules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { PnwCodeRenameResultRow } from "./PnwCodeRenameResultsState.js";
|
|
2
|
+
export declare const PNW_CODE_RENAME_RESULTS_PANEL_TAG = "pnw-code-rename-results-panel";
|
|
3
|
+
export declare const PNW_CODE_RENAME_RESULTS_ACTION = "pnw-code-rename-results-action";
|
|
4
|
+
export interface PnwCodeRenameResultsPanelModel {
|
|
5
|
+
readonly rows: readonly PnwCodeRenameResultRow[];
|
|
6
|
+
readonly applied?: boolean;
|
|
7
|
+
readonly running?: boolean;
|
|
8
|
+
readonly title?: string;
|
|
9
|
+
readonly summary?: string;
|
|
10
|
+
readonly emptyMessage?: string;
|
|
11
|
+
readonly capabilities?: {
|
|
12
|
+
readonly open?: boolean;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export type PnwCodeRenameResultsActionDetail = {
|
|
16
|
+
readonly kind: "open";
|
|
17
|
+
readonly id: string;
|
|
18
|
+
readonly path: string;
|
|
19
|
+
readonly line?: number;
|
|
20
|
+
};
|
|
21
|
+
export declare class PnwCodeRenameResultsPanel extends HTMLElement {
|
|
22
|
+
private readonly root;
|
|
23
|
+
private currentModel;
|
|
24
|
+
get model(): PnwCodeRenameResultsPanelModel | undefined;
|
|
25
|
+
set model(value: PnwCodeRenameResultsPanelModel | undefined);
|
|
26
|
+
connectedCallback(): void;
|
|
27
|
+
private render;
|
|
28
|
+
private row;
|
|
29
|
+
private appendHighlighted;
|
|
30
|
+
private status;
|
|
31
|
+
private span;
|
|
32
|
+
private emitOpen;
|
|
33
|
+
}
|
|
34
|
+
export declare function pnwCodeDefineRenameResultsPanel(tagName?: string): typeof PnwCodeRenameResultsPanel;
|
|
35
|
+
declare global {
|
|
36
|
+
interface HTMLElementTagNameMap {
|
|
37
|
+
"pnw-code-rename-results-panel": PnwCodeRenameResultsPanel;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=PnwCodeRenameResultsPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PnwCodeRenameResultsPanel.d.ts","sourceRoot":"","sources":["../../src/ui/PnwCodeRenameResultsPanel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,gCAAgC,CAAC;AAExC,eAAO,MAAM,iCAAiC,kCAAkC,CAAC;AACjF,eAAO,MAAM,8BAA8B,mCAAmC,CAAC;AAE/E,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,IAAI,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACjD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACrD;AAED,MAAM,MAAM,gCAAgC,GAAG;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAoBF,qBAAa,yBAA0B,SAAQ,WAAW;IACxD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuC;IAC5D,OAAO,CAAC,YAAY,CAA6C;IAEjE,IAAI,KAAK,IAAI,8BAA8B,GAAG,SAAS,CAA8B;IACrF,IAAI,KAAK,CAAC,KAAK,EAAE,8BAA8B,GAAG,SAAS,EAA+C;IAC1G,iBAAiB,IAAI,IAAI;IAEzB,OAAO,CAAC,MAAM;IAoBd,OAAO,CAAC,GAAG;IAmBX,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,QAAQ;CACjB;AAED,wBAAgB,+BAA+B,CAAC,OAAO,SAAoC,GAAG,OAAO,yBAAyB,CAG7H;AAED,OAAO,CAAC,MAAM,CAAC;IAAE,UAAU,qBAAqB;QAAG,+BAA+B,EAAE,yBAAyB,CAAC;KAAE;CAAE"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
export const PNW_CODE_RENAME_RESULTS_PANEL_TAG = "pnw-code-rename-results-panel";
|
|
3
|
+
export const PNW_CODE_RENAME_RESULTS_ACTION = "pnw-code-rename-results-action";
|
|
4
|
+
const LEVEL_MARK = {
|
|
5
|
+
text: "T",
|
|
6
|
+
file: "F",
|
|
7
|
+
dir: "D",
|
|
8
|
+
};
|
|
9
|
+
const STYLE = `
|
|
10
|
+
:host{display:block;min-width:0;max-width:100%;color:var(--vscode-foreground,var(--text,#172033));font:12px/1.4 var(--vscode-font-family,system-ui,sans-serif)}
|
|
11
|
+
:host([hidden]){display:none}*{box-sizing:border-box}button{font:inherit;cursor:pointer}button:focus-visible{outline:1px solid var(--vscode-focusBorder,var(--accent,#2563eb));outline-offset:1px}
|
|
12
|
+
.panel{min-width:0;max-width:100%;overflow:auto;border:1px solid var(--vscode-panel-border,var(--border,#d7dde8));border-radius:6px;background:var(--vscode-editor-background,var(--panel-bg,#fff))}
|
|
13
|
+
.head{position:sticky;top:0;z-index:2;display:flex;align-items:center;gap:8px;min-height:34px;padding:6px 9px;background:var(--vscode-editorWidget-background,var(--panel-head-bg,#eef2ff));border-bottom:1px solid var(--vscode-panel-border,var(--border,#d7dde8))}.title{font-weight:650}.summary{min-width:0;overflow:hidden;color:var(--vscode-descriptionForeground,var(--muted,#64748b));font-size:11px;text-overflow:ellipsis;white-space:nowrap}.count{margin-left:auto;color:var(--vscode-descriptionForeground,var(--muted,#64748b));white-space:nowrap}
|
|
14
|
+
.list{margin:0;padding:0;list-style:none}.row{display:flex;align-items:center;gap:7px;min-width:0;min-height:39px;padding:5px 8px;border-top:1px solid color-mix(in srgb,var(--vscode-panel-border,var(--border,#d7dde8)) 65%,transparent)}.row:first-child{border-top:0}.row:hover{background:var(--vscode-list-hoverBackground,var(--hover,rgba(37,99,235,.08)))}
|
|
15
|
+
.kind{display:inline-grid;flex:0 0 20px;width:20px;height:20px;place-items:center;border:1px solid var(--vscode-panel-border,var(--border,#d7dde8));border-radius:3px;color:var(--vscode-descriptionForeground,var(--muted,#64748b));font:10px/1 var(--vscode-editor-font-family,monospace)}
|
|
16
|
+
.main{display:block;flex:1 1 auto;min-width:0;overflow:hidden}.main.open{cursor:pointer}.main.open:hover .path{text-decoration:underline}.path{display:block;overflow:hidden;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.detail{display:block;overflow:hidden;color:var(--vscode-descriptionForeground,var(--muted,#64748b));font-size:11px;text-overflow:ellipsis;white-space:nowrap}mark{padding:0;color:inherit;background:var(--vscode-editor-findMatchHighlightBackground,#fde68a)}
|
|
17
|
+
.target{flex:0 1 34%;min-width:70px;overflow:hidden;color:var(--vscode-descriptionForeground,var(--muted,#64748b));font:11px/1.3 var(--vscode-editor-font-family,monospace);text-overflow:ellipsis;white-space:nowrap}.actions{display:flex;flex:0 0 auto;opacity:0}.row:hover .actions,.actions:focus-within{opacity:1}.icon{width:26px;height:26px;padding:0;color:inherit;background:transparent;border:1px solid transparent;border-radius:3px}.icon:hover{background:var(--vscode-toolbar-hoverBackground,var(--hover,rgba(37,99,235,.08)));border-color:var(--vscode-panel-border,var(--border,#d7dde8))}
|
|
18
|
+
.status{flex:0 0 auto;padding:1px 6px;border:1px solid currentColor;border-radius:999px;font-size:10px;white-space:nowrap}.status.neutral{color:var(--vscode-descriptionForeground,var(--muted,#64748b))}.status.success{color:var(--vscode-testing-iconPassed,#15803d)}.status.warning{color:var(--vscode-gitDecoration-modifiedResourceForeground,#b45309)}.status.danger{color:var(--vscode-errorForeground,var(--danger,#b91c1c))}.empty{display:block;padding:20px 10px;color:var(--vscode-descriptionForeground,var(--muted,#64748b));text-align:center}
|
|
19
|
+
`;
|
|
20
|
+
export class PnwCodeRenameResultsPanel extends HTMLElement {
|
|
21
|
+
root = this.attachShadow({ mode: "open" });
|
|
22
|
+
currentModel;
|
|
23
|
+
get model() { return this.currentModel; }
|
|
24
|
+
set model(value) { this.currentModel = value; this.render(); }
|
|
25
|
+
connectedCallback() { this.render(); }
|
|
26
|
+
render() {
|
|
27
|
+
if (!this.isConnected)
|
|
28
|
+
return;
|
|
29
|
+
const style = document.createElement("style");
|
|
30
|
+
style.textContent = STYLE;
|
|
31
|
+
const panel = document.createElement("section");
|
|
32
|
+
panel.className = "panel";
|
|
33
|
+
panel.setAttribute("aria-label", "搜索替换结果");
|
|
34
|
+
const model = this.currentModel;
|
|
35
|
+
if (!model?.rows.length)
|
|
36
|
+
panel.append(this.span(model?.emptyMessage ?? "没有匹配结果", "empty"));
|
|
37
|
+
else {
|
|
38
|
+
const head = document.createElement("header");
|
|
39
|
+
head.className = "head";
|
|
40
|
+
head.append(this.span(model.title ?? (model.applied ? "已替换" : "预览"), "title"), this.span(model.summary ?? "", "summary"), this.span(`${model.rows.length} 项`, "count"));
|
|
41
|
+
const list = document.createElement("ul");
|
|
42
|
+
list.className = "list";
|
|
43
|
+
for (const row of model.rows)
|
|
44
|
+
list.append(this.row(row));
|
|
45
|
+
panel.append(head, list);
|
|
46
|
+
}
|
|
47
|
+
this.root.replaceChildren(style, panel);
|
|
48
|
+
}
|
|
49
|
+
row(row) {
|
|
50
|
+
const item = document.createElement("li");
|
|
51
|
+
item.className = "row";
|
|
52
|
+
item.title = [row.originalPath, row.detail].filter(Boolean).join("\n");
|
|
53
|
+
item.append(this.span(LEVEL_MARK[row.level], "kind"));
|
|
54
|
+
const main = document.createElement("span");
|
|
55
|
+
const canOpen = this.currentModel?.capabilities?.open === true && !this.currentModel.running;
|
|
56
|
+
main.className = `main${canOpen ? " open" : ""}`;
|
|
57
|
+
const path = this.span("", "path");
|
|
58
|
+
this.appendHighlighted(path, row.relativePath, row.sourceHighlightTerms);
|
|
59
|
+
const parts = [`${row.occurrences} 处`, row.levelLabel, row.encodingLabel].filter(Boolean);
|
|
60
|
+
main.append(path, this.span(parts.join(" · "), "detail"));
|
|
61
|
+
if (canOpen)
|
|
62
|
+
main.onclick = () => this.emitOpen(row);
|
|
63
|
+
const target = this.span(row.targetOrPositionLabel, "target");
|
|
64
|
+
target.title = row.targetOrPositionLabel;
|
|
65
|
+
const actions = this.span("", "actions");
|
|
66
|
+
if (canOpen) {
|
|
67
|
+
const button = document.createElement("button");
|
|
68
|
+
button.type = "button";
|
|
69
|
+
button.className = "icon";
|
|
70
|
+
button.textContent = "↗";
|
|
71
|
+
button.title = "打开并定位";
|
|
72
|
+
button.setAttribute("aria-label", "打开并定位");
|
|
73
|
+
button.onclick = () => this.emitOpen(row);
|
|
74
|
+
actions.append(button);
|
|
75
|
+
}
|
|
76
|
+
item.append(main, target, actions, this.status(row.statusLabel, row.statusTone));
|
|
77
|
+
return item;
|
|
78
|
+
}
|
|
79
|
+
appendHighlighted(parent, text, terms) {
|
|
80
|
+
const active = [...new Set(terms.map((term) => term.trim()).filter(Boolean))].sort((a, b) => b.length - a.length);
|
|
81
|
+
if (!active.length) {
|
|
82
|
+
parent.textContent = text;
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const lower = text.toLocaleLowerCase();
|
|
86
|
+
let offset = 0;
|
|
87
|
+
while (offset < text.length) {
|
|
88
|
+
let index = -1;
|
|
89
|
+
let match = "";
|
|
90
|
+
for (const term of active) {
|
|
91
|
+
const candidate = lower.indexOf(term.toLocaleLowerCase(), offset);
|
|
92
|
+
if (candidate >= 0 && (index < 0 || candidate < index || (candidate === index && term.length > match.length))) {
|
|
93
|
+
index = candidate;
|
|
94
|
+
match = term;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (index < 0) {
|
|
98
|
+
parent.append(document.createTextNode(text.slice(offset)));
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
if (index > offset)
|
|
102
|
+
parent.append(document.createTextNode(text.slice(offset, index)));
|
|
103
|
+
const mark = document.createElement("mark");
|
|
104
|
+
mark.textContent = text.slice(index, index + match.length);
|
|
105
|
+
parent.append(mark);
|
|
106
|
+
offset = index + match.length;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
status(label, tone) { return this.span(label, `status ${tone}`); }
|
|
110
|
+
span(text, className) { const span = document.createElement("span"); span.className = className; span.textContent = text; return span; }
|
|
111
|
+
emitOpen(row) { this.dispatchEvent(new CustomEvent(PNW_CODE_RENAME_RESULTS_ACTION, { bubbles: true, composed: true, detail: { kind: "open", id: row.id, path: row.openPath, line: row.openLine } })); }
|
|
112
|
+
}
|
|
113
|
+
export function pnwCodeDefineRenameResultsPanel(tagName = PNW_CODE_RENAME_RESULTS_PANEL_TAG) {
|
|
114
|
+
const registered = customElements.get(tagName);
|
|
115
|
+
if (registered)
|
|
116
|
+
return registered;
|
|
117
|
+
customElements.define(tagName, PnwCodeRenameResultsPanel);
|
|
118
|
+
return PnwCodeRenameResultsPanel;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=PnwCodeRenameResultsPanel.js.map
|