@cortexkit/aft-opencode 0.2.0 → 0.4.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/dist/bridge.d.ts +8 -0
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +45 -2
- package/dist/bridge.js.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +17 -0
- package/dist/config.js.map +1 -1
- package/dist/downloader.d.ts.map +1 -1
- package/dist/downloader.js +51 -15
- package/dist/downloader.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +73 -15
- package/dist/index.js.map +1 -1
- package/dist/metadata-store.d.ts +29 -0
- package/dist/metadata-store.d.ts.map +1 -0
- package/dist/metadata-store.js +53 -0
- package/dist/metadata-store.js.map +1 -0
- package/dist/normalize-schemas.d.ts +16 -0
- package/dist/normalize-schemas.d.ts.map +1 -0
- package/dist/normalize-schemas.js +45 -0
- package/dist/normalize-schemas.js.map +1 -0
- package/dist/patch-parser.d.ts +33 -0
- package/dist/patch-parser.d.ts.map +1 -0
- package/dist/patch-parser.js +247 -0
- package/dist/patch-parser.js.map +1 -0
- package/dist/platform.d.ts +21 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +31 -0
- package/dist/platform.js.map +1 -0
- package/dist/pool.d.ts.map +1 -1
- package/dist/pool.js +14 -5
- package/dist/pool.js.map +1 -1
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +6 -9
- package/dist/resolver.js.map +1 -1
- package/dist/tools/ast.d.ts.map +1 -1
- package/dist/tools/ast.js +179 -89
- package/dist/tools/ast.js.map +1 -1
- package/dist/tools/hoisted.d.ts +26 -0
- package/dist/tools/hoisted.d.ts.map +1 -0
- package/dist/tools/hoisted.js +852 -0
- package/dist/tools/hoisted.js.map +1 -0
- package/dist/tools/imports.d.ts.map +1 -1
- package/dist/tools/imports.js +41 -21
- package/dist/tools/imports.js.map +1 -1
- package/dist/tools/lsp.d.ts +1 -2
- package/dist/tools/lsp.d.ts.map +1 -1
- package/dist/tools/lsp.js +45 -110
- package/dist/tools/lsp.js.map +1 -1
- package/dist/tools/navigation.d.ts.map +1 -1
- package/dist/tools/navigation.js +25 -10
- package/dist/tools/navigation.js.map +1 -1
- package/dist/tools/permissions.d.ts +8 -0
- package/dist/tools/permissions.d.ts.map +1 -0
- package/dist/tools/permissions.js +50 -0
- package/dist/tools/permissions.js.map +1 -0
- package/dist/tools/reading.d.ts +1 -1
- package/dist/tools/reading.d.ts.map +1 -1
- package/dist/tools/reading.js +170 -54
- package/dist/tools/reading.js.map +1 -1
- package/dist/tools/refactoring.d.ts.map +1 -1
- package/dist/tools/refactoring.js +73 -24
- package/dist/tools/refactoring.js.map +1 -1
- package/dist/tools/safety.d.ts.map +1 -1
- package/dist/tools/safety.js +38 -11
- package/dist/tools/safety.js.map +1 -1
- package/dist/tools/structure.d.ts.map +1 -1
- package/dist/tools/structure.js +70 -20
- package/dist/tools/structure.js.map +1 -1
- package/package.json +7 -7
- package/dist/tools/editing.d.ts +0 -7
- package/dist/tools/editing.d.ts.map +0 -1
- package/dist/tools/editing.js +0 -150
- package/dist/tools/editing.js.map +0 -1
package/dist/tools/structure.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { tool } from "@opencode-ai/plugin";
|
|
2
|
+
import { askEditPermission, permissionDeniedResponse, resolveAbsolutePath, resolveRelativePattern, } from "./permissions.js";
|
|
2
3
|
const z = tool.schema;
|
|
3
4
|
/**
|
|
4
5
|
* Tool definitions for scope-aware structure commands:
|
|
@@ -7,29 +8,41 @@ const z = tool.schema;
|
|
|
7
8
|
export function structureTools(ctx) {
|
|
8
9
|
return {
|
|
9
10
|
aft_transform: {
|
|
10
|
-
description: "Scope-aware structural code transformations with correct indentation.\n" +
|
|
11
|
+
description: "Scope-aware structural code transformations with correct indentation.\n\n" +
|
|
12
|
+
"Language-specific: add_derive (Rust), add_struct_tags (Go), add_decorator (Python), wrap_try_catch (TS/JS), add_member (any language).\n\n" +
|
|
11
13
|
"Ops:\n" +
|
|
12
|
-
"- 'add_member': Insert method/field into class, struct, or impl block.
|
|
13
|
-
"- 'add_derive': Add Rust derive macros to struct/enum.
|
|
14
|
-
"- 'wrap_try_catch': Wrap a TS/JS function body in try/catch.
|
|
15
|
-
"- 'add_decorator': Add Python decorator to function/class.
|
|
16
|
-
"- 'add_struct_tags': Add/update Go struct field tags.
|
|
17
|
-
"
|
|
14
|
+
"- 'add_member': Insert method/field into class, struct, or impl block. Requires 'container' (container name) and 'code'. Optional 'position'.\n" +
|
|
15
|
+
"- 'add_derive': Add Rust derive macros to a struct/enum. Requires 'target' and 'derives' array. Deduplicates existing derives.\n" +
|
|
16
|
+
"- 'wrap_try_catch': Wrap a TS/JS function body in try/catch. Requires 'target' (function name). Optional 'catchBody'.\n" +
|
|
17
|
+
"- 'add_decorator': Add Python decorator to function/class. Requires 'target' and 'decorator' (without @). Optional 'position'.\n" +
|
|
18
|
+
"- 'add_struct_tags': Add/update Go struct field tags. Requires 'target' (struct name), 'field', 'tag', 'value'.\n\n" +
|
|
19
|
+
"Each op requires specific parameters — see parameter descriptions for requirements.\n\n" +
|
|
20
|
+
"Returns:\n" +
|
|
21
|
+
"- Dry run (any op): { ok, dry_run, diff, syntax_valid? }\n" +
|
|
22
|
+
"- add_member: { file, scope, position, formatted, syntax_valid?, format_skipped_reason?, validation_errors?, validate_skipped_reason?, backup_id?, lsp_diagnostics? }\n" +
|
|
23
|
+
"- add_derive: { file, target, derives, formatted, syntax_valid?, format_skipped_reason?, validation_errors?, validate_skipped_reason?, backup_id?, lsp_diagnostics? }\n" +
|
|
24
|
+
"- wrap_try_catch: { file, target, formatted, syntax_valid?, format_skipped_reason?, validation_errors?, validate_skipped_reason?, backup_id?, lsp_diagnostics? }\n" +
|
|
25
|
+
"- add_decorator: { file, target, decorator, formatted, syntax_valid?, format_skipped_reason?, validation_errors?, validate_skipped_reason?, backup_id?, lsp_diagnostics? }\n" +
|
|
26
|
+
"- add_struct_tags: { file, target, field, tag_string, formatted, syntax_valid?, format_skipped_reason?, validation_errors?, validate_skipped_reason?, backup_id?, lsp_diagnostics? }",
|
|
27
|
+
// Parameters are Zod-optional because different ops need different subsets.
|
|
28
|
+
// Runtime guards below validate per-op requirements and give clear errors.
|
|
18
29
|
args: {
|
|
19
30
|
op: z
|
|
20
31
|
.enum(["add_member", "add_derive", "wrap_try_catch", "add_decorator", "add_struct_tags"])
|
|
21
32
|
.describe("Transformation operation"),
|
|
22
|
-
|
|
33
|
+
filePath: z
|
|
34
|
+
.string()
|
|
35
|
+
.describe("Path to the source file (absolute or relative to project root)"),
|
|
23
36
|
// add_member
|
|
24
|
-
|
|
37
|
+
container: z
|
|
25
38
|
.string()
|
|
26
39
|
.optional()
|
|
27
|
-
.describe("Container name
|
|
40
|
+
.describe("Container name for add_member — the class, struct, or impl block to insert into. Appears as 'scope' in the response."),
|
|
28
41
|
code: z.string().optional().describe("Member code to insert (add_member)"),
|
|
29
42
|
position: z
|
|
30
43
|
.string()
|
|
31
44
|
.optional()
|
|
32
|
-
.describe("
|
|
45
|
+
.describe("For add_member: 'first', 'last' (default), 'before:name', 'after:name'. For add_decorator: 'first' (default) or 'last' only."),
|
|
33
46
|
// add_derive, wrap_try_catch, add_decorator, add_struct_tags
|
|
34
47
|
target: z
|
|
35
48
|
.string()
|
|
@@ -39,7 +52,7 @@ export function structureTools(ctx) {
|
|
|
39
52
|
.array(z.string())
|
|
40
53
|
.optional()
|
|
41
54
|
.describe("Derive macro names (add_derive — e.g. ['Clone', 'Debug'])"),
|
|
42
|
-
|
|
55
|
+
catchBody: z
|
|
43
56
|
.string()
|
|
44
57
|
.optional()
|
|
45
58
|
.describe("Catch block body (wrap_try_catch — default: 'throw error;')"),
|
|
@@ -58,20 +71,57 @@ export function structureTools(ctx) {
|
|
|
58
71
|
validate: z
|
|
59
72
|
.enum(["syntax", "full"])
|
|
60
73
|
.optional()
|
|
61
|
-
.describe("Validation level: 'syntax' (default) or 'full'"),
|
|
62
|
-
|
|
74
|
+
.describe("Validation level: 'syntax' (default) or 'full'. Syntax = tree-sitter parse check only. Full = also runs LSP type-checking (slower, catches more errors)"),
|
|
75
|
+
dryRun: z
|
|
76
|
+
.boolean()
|
|
77
|
+
.optional()
|
|
78
|
+
.describe("Preview without modifying the file (default: false)"),
|
|
63
79
|
},
|
|
64
80
|
execute: async (args, context) => {
|
|
65
81
|
const bridge = ctx.pool.getBridge(context.directory);
|
|
66
82
|
const op = args.op;
|
|
67
|
-
const
|
|
83
|
+
const isDryRun = args.dryRun === true;
|
|
84
|
+
if (op === "add_member") {
|
|
85
|
+
if (typeof args.container !== "string")
|
|
86
|
+
throw new Error("'container' is required for 'add_member' op");
|
|
87
|
+
if (typeof args.code !== "string")
|
|
88
|
+
throw new Error("'code' is required for 'add_member' op");
|
|
89
|
+
}
|
|
90
|
+
if (op === "add_derive" ||
|
|
91
|
+
op === "wrap_try_catch" ||
|
|
92
|
+
op === "add_decorator" ||
|
|
93
|
+
op === "add_struct_tags") {
|
|
94
|
+
if (typeof args.target !== "string")
|
|
95
|
+
throw new Error(`'target' is required for '${op}' op`);
|
|
96
|
+
}
|
|
97
|
+
if (op === "add_derive" && !Array.isArray(args.derives)) {
|
|
98
|
+
throw new Error("'derives' array is required for 'add_derive' op");
|
|
99
|
+
}
|
|
100
|
+
if (op === "add_decorator" && typeof args.decorator !== "string") {
|
|
101
|
+
throw new Error("'decorator' is required for 'add_decorator' op");
|
|
102
|
+
}
|
|
103
|
+
if (op === "add_struct_tags") {
|
|
104
|
+
if (typeof args.field !== "string")
|
|
105
|
+
throw new Error("'field' is required for 'add_struct_tags' op");
|
|
106
|
+
if (typeof args.tag !== "string")
|
|
107
|
+
throw new Error("'tag' is required for 'add_struct_tags' op");
|
|
108
|
+
if (typeof args.value !== "string")
|
|
109
|
+
throw new Error("'value' is required for 'add_struct_tags' op");
|
|
110
|
+
}
|
|
111
|
+
if (!isDryRun) {
|
|
112
|
+
const filePath = resolveAbsolutePath(context, args.filePath);
|
|
113
|
+
const permissionError = await askEditPermission(context, [resolveRelativePattern(context, args.filePath)], { filepath: filePath });
|
|
114
|
+
if (permissionError)
|
|
115
|
+
return permissionDeniedResponse(permissionError);
|
|
116
|
+
}
|
|
117
|
+
const params = { file: args.filePath };
|
|
68
118
|
if (args.validate !== undefined)
|
|
69
119
|
params.validate = args.validate;
|
|
70
|
-
if (args.
|
|
71
|
-
params.dry_run = args.
|
|
120
|
+
if (args.dryRun !== undefined)
|
|
121
|
+
params.dry_run = args.dryRun;
|
|
72
122
|
switch (op) {
|
|
73
123
|
case "add_member":
|
|
74
|
-
params.scope = args.
|
|
124
|
+
params.scope = args.container;
|
|
75
125
|
params.code = args.code;
|
|
76
126
|
if (args.position !== undefined)
|
|
77
127
|
params.position = args.position;
|
|
@@ -82,8 +132,8 @@ export function structureTools(ctx) {
|
|
|
82
132
|
break;
|
|
83
133
|
case "wrap_try_catch":
|
|
84
134
|
params.target = args.target;
|
|
85
|
-
if (args.
|
|
86
|
-
params.catch_body = args.
|
|
135
|
+
if (args.catchBody !== undefined)
|
|
136
|
+
params.catch_body = args.catchBody;
|
|
87
137
|
break;
|
|
88
138
|
case "add_decorator":
|
|
89
139
|
params.target = args.target;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../../src/tools/structure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../../src/tools/structure.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cortexkit/aft-opencode",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "OpenCode plugin for Agent File Tools (AFT) — tree-sitter powered code analysis",
|
|
5
|
+
"description": "OpenCode plugin for Agent File Tools (AFT) — tree-sitter and lsp powered code analysis",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"license": "MIT",
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
"zod": "^4.1.8"
|
|
28
28
|
},
|
|
29
29
|
"optionalDependencies": {
|
|
30
|
-
"@cortexkit/aft-darwin-arm64": "0.
|
|
31
|
-
"@cortexkit/aft-darwin-x64": "0.
|
|
32
|
-
"@cortexkit/aft-linux-arm64": "0.
|
|
33
|
-
"@cortexkit/aft-linux-x64": "0.
|
|
34
|
-
"@cortexkit/aft-win32-x64": "0.
|
|
30
|
+
"@cortexkit/aft-darwin-arm64": "0.4.1",
|
|
31
|
+
"@cortexkit/aft-darwin-x64": "0.4.1",
|
|
32
|
+
"@cortexkit/aft-linux-arm64": "0.4.1",
|
|
33
|
+
"@cortexkit/aft-linux-x64": "0.4.1",
|
|
34
|
+
"@cortexkit/aft-win32-x64": "0.4.1"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/node": "^22.0.0",
|
package/dist/tools/editing.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { ToolDefinition } from "@opencode-ai/plugin";
|
|
2
|
-
import type { PluginContext } from "../types.js";
|
|
3
|
-
/**
|
|
4
|
-
* Tool definitions for code editing commands: write, edit_symbol, edit_match, batch.
|
|
5
|
-
*/
|
|
6
|
-
export declare function editingTools(ctx: PluginContext): Record<string, ToolDefinition>;
|
|
7
|
-
//# sourceMappingURL=editing.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"editing.d.ts","sourceRoot":"","sources":["../../src/tools/editing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAsBjD;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAgI/E"}
|
package/dist/tools/editing.js
DELETED
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import { tool } from "@opencode-ai/plugin";
|
|
2
|
-
import { queryLspHints } from "../lsp.js";
|
|
3
|
-
const z = tool.schema;
|
|
4
|
-
/** Valid operations for edit_symbol. */
|
|
5
|
-
const editOperationEnum = z
|
|
6
|
-
.enum(["replace", "delete", "insert_before", "insert_after"])
|
|
7
|
-
.describe("The edit operation to perform on the symbol");
|
|
8
|
-
/** Schema for a single batch edit item — either match-replace or line-range. */
|
|
9
|
-
const batchEditItem = z.union([
|
|
10
|
-
z.object({
|
|
11
|
-
match: z.string().describe("Text pattern to find and replace"),
|
|
12
|
-
replacement: z.string().describe("Replacement text"),
|
|
13
|
-
}),
|
|
14
|
-
z.object({
|
|
15
|
-
line_start: z.number().describe("Start line number (1-indexed)"),
|
|
16
|
-
line_end: z.number().describe("End line number (1-indexed, inclusive)"),
|
|
17
|
-
content: z.string().describe("Content to replace the line range with"),
|
|
18
|
-
}),
|
|
19
|
-
]);
|
|
20
|
-
/**
|
|
21
|
-
* Tool definitions for code editing commands: write, edit_symbol, edit_match, batch.
|
|
22
|
-
*/
|
|
23
|
-
export function editingTools(ctx) {
|
|
24
|
-
return {
|
|
25
|
-
aft_edit: {
|
|
26
|
-
description: "Edit files with tree-sitter precision. All modes auto-backup before changes and support dry_run.\n" +
|
|
27
|
-
"Modes:\n" +
|
|
28
|
-
"- 'symbol': Edit a named symbol (function, class, type) — preferred for code changes. Needs 'symbol', 'operation' (replace/delete/insert_before/insert_after), and 'content'. Response includes context_before/context_after (3 lines each) to detect duplication.\n" +
|
|
29
|
-
"- 'match': Find and replace text by content match — use for config values, strings, unnamed code. Needs 'match', 'replacement'. Set replace_all=true to replace ALL occurrences at once. Returns ambiguous_match if multiple hits without occurrence or replace_all. For multi-line matching, use actual newlines in the JSON string value. Supports glob patterns in 'file' (e.g. '**/*.ts') to replace across multiple files at once — returns {files: [...], total_replacements, total_files}.\n" +
|
|
30
|
-
"- 'write': Write full file content — for new files or complete rewrites. Needs 'content'.\n" +
|
|
31
|
-
"- 'batch': Multiple edits in one file atomically — each edit is {match, replacement} or {line_start, line_end, content} (1-based, inclusive). Supports per-edit 'occurrence' for disambiguation. Set content to empty string to delete lines entirely. line_start == total_lines+1 appends at EOF. line_end is auto-clamped to last line (safe to overshoot).\n" +
|
|
32
|
-
"- 'transaction': Atomic multi-file edits with rollback — if any file fails, all revert. Needs 'operations' array of {file, command, ...}.\n" +
|
|
33
|
-
"Returns formatted, validation_errors, backup_id.",
|
|
34
|
-
args: {
|
|
35
|
-
mode: z.enum(["symbol", "match", "write", "batch", "transaction"]).describe("Editing mode"),
|
|
36
|
-
file: z
|
|
37
|
-
.string()
|
|
38
|
-
.optional()
|
|
39
|
-
.describe("Path to the file (required for all modes except transaction)"),
|
|
40
|
-
// symbol mode
|
|
41
|
-
symbol: z.string().optional().describe("Symbol name to edit (symbol mode)"),
|
|
42
|
-
operation: editOperationEnum.optional().describe("Edit operation (symbol mode)"),
|
|
43
|
-
scope: z
|
|
44
|
-
.string()
|
|
45
|
-
.optional()
|
|
46
|
-
.describe("Qualified scope for disambiguation (e.g. 'ClassName.method')"),
|
|
47
|
-
// match mode
|
|
48
|
-
match: z.string().optional().describe("Text to find (match mode)"),
|
|
49
|
-
replacement: z.string().optional().describe("Replacement text (match mode)"),
|
|
50
|
-
occurrence: z
|
|
51
|
-
.number()
|
|
52
|
-
.describe("Zero-based index selecting which occurrence to replace when multiple matches exist (0 = first, 1 = second, etc). Use with ambiguous_match response. (match mode)"),
|
|
53
|
-
replace_all: z
|
|
54
|
-
.boolean()
|
|
55
|
-
.optional()
|
|
56
|
-
.describe("Replace ALL occurrences instead of disambiguating (match mode, default: false)"),
|
|
57
|
-
// write + symbol content
|
|
58
|
-
content: z
|
|
59
|
-
.string()
|
|
60
|
-
.optional()
|
|
61
|
-
.describe("New content (write mode: full file, symbol mode: replacement body)"),
|
|
62
|
-
create_dirs: z
|
|
63
|
-
.boolean()
|
|
64
|
-
.optional()
|
|
65
|
-
.describe("Create parent directories (write mode, default: false)"),
|
|
66
|
-
// batch mode
|
|
67
|
-
edits: z
|
|
68
|
-
.array(batchEditItem)
|
|
69
|
-
.optional()
|
|
70
|
-
.describe("Array of edits to apply atomically (batch mode)"),
|
|
71
|
-
// transaction mode
|
|
72
|
-
operations: z
|
|
73
|
-
.array(z.object({
|
|
74
|
-
file: z.string().describe("File path"),
|
|
75
|
-
command: z.enum(["write", "edit_match"]).describe("Operation type"),
|
|
76
|
-
content: z.string().optional().describe("Full content for write"),
|
|
77
|
-
match: z.string().optional().describe("Text to find for edit_match"),
|
|
78
|
-
replacement: z.string().optional().describe("Replacement for edit_match"),
|
|
79
|
-
}))
|
|
80
|
-
.optional()
|
|
81
|
-
.describe("Array of file operations (transaction mode)"),
|
|
82
|
-
// common
|
|
83
|
-
validate: z
|
|
84
|
-
.enum(["syntax", "full"])
|
|
85
|
-
.optional()
|
|
86
|
-
.describe("Validation level: 'syntax' (default) or 'full'"),
|
|
87
|
-
dry_run: z.boolean().optional().describe("Preview as unified diff without modifying files"),
|
|
88
|
-
},
|
|
89
|
-
execute: async (args, context) => {
|
|
90
|
-
const bridge = ctx.pool.getBridge(context.directory);
|
|
91
|
-
const mode = args.mode;
|
|
92
|
-
const params = {};
|
|
93
|
-
if (args.file !== undefined)
|
|
94
|
-
params.file = args.file;
|
|
95
|
-
if (args.validate !== undefined)
|
|
96
|
-
params.validate = args.validate;
|
|
97
|
-
if (args.dry_run !== undefined)
|
|
98
|
-
params.dry_run = args.dry_run;
|
|
99
|
-
let command;
|
|
100
|
-
switch (mode) {
|
|
101
|
-
case "symbol": {
|
|
102
|
-
command = "edit_symbol";
|
|
103
|
-
params.symbol = args.symbol;
|
|
104
|
-
params.operation = args.operation;
|
|
105
|
-
if (args.content !== undefined)
|
|
106
|
-
params.content = args.content;
|
|
107
|
-
if (args.scope !== undefined)
|
|
108
|
-
params.scope = args.scope;
|
|
109
|
-
const hints = await queryLspHints(ctx.client, args.symbol);
|
|
110
|
-
if (hints)
|
|
111
|
-
params.lsp_hints = hints;
|
|
112
|
-
break;
|
|
113
|
-
}
|
|
114
|
-
case "match": {
|
|
115
|
-
command = "edit_match";
|
|
116
|
-
params.match = args.match;
|
|
117
|
-
params.replacement = args.replacement;
|
|
118
|
-
if (args.occurrence !== undefined)
|
|
119
|
-
params.occurrence = Number(args.occurrence);
|
|
120
|
-
if (args.replace_all !== undefined)
|
|
121
|
-
params.replace_all = args.replace_all;
|
|
122
|
-
break;
|
|
123
|
-
}
|
|
124
|
-
case "write": {
|
|
125
|
-
command = "write";
|
|
126
|
-
params.content = args.content;
|
|
127
|
-
if (args.create_dirs !== undefined)
|
|
128
|
-
params.create_dirs = args.create_dirs;
|
|
129
|
-
break;
|
|
130
|
-
}
|
|
131
|
-
case "batch": {
|
|
132
|
-
command = "batch";
|
|
133
|
-
params.edits = args.edits;
|
|
134
|
-
break;
|
|
135
|
-
}
|
|
136
|
-
case "transaction": {
|
|
137
|
-
command = "transaction";
|
|
138
|
-
params.operations = args.operations;
|
|
139
|
-
break;
|
|
140
|
-
}
|
|
141
|
-
default:
|
|
142
|
-
command = mode;
|
|
143
|
-
}
|
|
144
|
-
const response = await bridge.send(command, params);
|
|
145
|
-
return JSON.stringify(response);
|
|
146
|
-
},
|
|
147
|
-
},
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
//# sourceMappingURL=editing.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"editing.js","sourceRoot":"","sources":["../../src/tools/editing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AAEtB,wCAAwC;AACxC,MAAM,iBAAiB,GAAG,CAAC;KACxB,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;KAC5D,QAAQ,CAAC,6CAA6C,CAAC,CAAC;AAE3D,gFAAgF;AAChF,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC;IAC5B,CAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAC9D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KACrD,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAChE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;QACvE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KACvE,CAAC;CACH,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAkB;IAC7C,OAAO;QACL,QAAQ,EAAE;YACR,WAAW,EACT,oGAAoG;gBACpG,UAAU;gBACV,sQAAsQ;gBACtQ,qeAAqe;gBACre,6FAA6F;gBAC7F,iWAAiW;gBACjW,6IAA6I;gBAC7I,kDAAkD;YACpD,IAAI,EAAE;gBACJ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAC3F,IAAI,EAAE,CAAC;qBACJ,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CAAC,8DAA8D,CAAC;gBAC3E,cAAc;gBACd,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;gBAC3E,SAAS,EAAE,iBAAiB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;gBAChF,KAAK,EAAE,CAAC;qBACL,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CAAC,8DAA8D,CAAC;gBAC3E,aAAa;gBACb,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;gBAClE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;gBAC5E,UAAU,EAAE,CAAC;qBACV,MAAM,EAAE;qBACR,QAAQ,CACP,kKAAkK,CACnK;gBACH,WAAW,EAAE,CAAC;qBACX,OAAO,EAAE;qBACT,QAAQ,EAAE;qBACV,QAAQ,CACP,gFAAgF,CACjF;gBACH,yBAAyB;gBACzB,OAAO,EAAE,CAAC;qBACP,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CAAC,oEAAoE,CAAC;gBACjF,WAAW,EAAE,CAAC;qBACX,OAAO,EAAE;qBACT,QAAQ,EAAE;qBACV,QAAQ,CAAC,wDAAwD,CAAC;gBACrE,aAAa;gBACb,KAAK,EAAE,CAAC;qBACL,KAAK,CAAC,aAAa,CAAC;qBACpB,QAAQ,EAAE;qBACV,QAAQ,CAAC,iDAAiD,CAAC;gBAC9D,mBAAmB;gBACnB,UAAU,EAAE,CAAC;qBACV,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;oBACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;oBACtC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;oBACnE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;oBACjE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;oBACpE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;iBAC1E,CAAC,CACH;qBACA,QAAQ,EAAE;qBACV,QAAQ,CAAC,6CAA6C,CAAC;gBAC1D,SAAS;gBACT,QAAQ,EAAE,CAAC;qBACR,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;qBACxB,QAAQ,EAAE;qBACV,QAAQ,CAAC,gDAAgD,CAAC;gBAC7D,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;aAC5F;YACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAmB,EAAE;gBAChD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACrD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAc,CAAC;gBACjC,MAAM,MAAM,GAA4B,EAAE,CAAC;gBAE3C,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;oBAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACrD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;oBAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACjE,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;oBAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;gBAE9D,IAAI,OAAe,CAAC;gBAEpB,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,QAAQ,CAAC,CAAC,CAAC;wBACd,OAAO,GAAG,aAAa,CAAC;wBACxB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;wBAC5B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;wBAClC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;4BAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;wBAC9D,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;4BAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;wBACxD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAgB,CAAC,CAAC;wBACrE,IAAI,KAAK;4BAAE,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;wBACpC,MAAM;oBACR,CAAC;oBACD,KAAK,OAAO,CAAC,CAAC,CAAC;wBACb,OAAO,GAAG,YAAY,CAAC;wBACvB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;wBAC1B,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;wBACtC,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;4BAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAC/E,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;4BAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;wBAC1E,MAAM;oBACR,CAAC;oBACD,KAAK,OAAO,CAAC,CAAC,CAAC;wBACb,OAAO,GAAG,OAAO,CAAC;wBAClB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;wBAC9B,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;4BAAE,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;wBAC1E,MAAM;oBACR,CAAC;oBACD,KAAK,OAAO,CAAC,CAAC,CAAC;wBACb,OAAO,GAAG,OAAO,CAAC;wBAClB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;wBAC1B,MAAM;oBACR,CAAC;oBACD,KAAK,aAAa,CAAC,CAAC,CAAC;wBACnB,OAAO,GAAG,aAAa,CAAC;wBACxB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;wBACpC,MAAM;oBACR,CAAC;oBACD;wBACE,OAAO,GAAG,IAAI,CAAC;gBACnB,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACpD,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
|