aboutsummaryrefslogtreecommitdiff
path: root/src/server/action.odin
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/action.odin')
-rw-r--r--src/server/action.odin52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/server/action.odin b/src/server/action.odin
index 0c3c74a..d1608b5 100644
--- a/src/server/action.odin
+++ b/src/server/action.odin
@@ -67,11 +67,63 @@ get_code_actions :: proc(document: ^Document, range: common.Range, config: ^comm
if selector, ok := position_context.selector_expr.derived.(^ast.Selector_Expr); ok {
add_missing_imports(&ast_context, selector, strings.clone(document.uri.uri), config, &actions)
}
+ } else if position_context.import_stmt != nil {
+ remove_unused_imports(document, strings.clone(document.uri.uri), config, &actions)
}
return actions[:], true
}
+remove_unused_imports :: proc(
+ document: ^Document,
+ uri: string,
+ config: ^common.Config,
+ actions: ^[dynamic]CodeAction,
+) {
+ unused_imports := find_unused_imports(document, context.temp_allocator)
+
+ if len(unused_imports) == 0 {
+ return
+ }
+
+ textEdits := make([dynamic]TextEdit, context.temp_allocator)
+
+ for imp in unused_imports {
+ range := common.get_token_range(imp.import_decl, document.ast.src)
+
+ import_edit := TextEdit {
+ range = range,
+ newText = "",
+ }
+
+ if (range.start.line != 1) {
+ if column, ok := common.get_last_column(import_edit.range.start.line - 1, document.text); ok {
+ import_edit.range.start.line -= 1
+ import_edit.range.start.character = column
+ }
+
+ }
+
+
+ append(&textEdits, import_edit)
+ }
+
+ workspaceEdit: WorkspaceEdit
+ workspaceEdit.changes = make(map[string][]TextEdit, 0, context.temp_allocator)
+ workspaceEdit.changes[uri] = textEdits[:]
+
+ append(
+ actions,
+ CodeAction {
+ kind = "refactor.rewrite",
+ isPreferred = true,
+ title = fmt.tprint("remove unused imports"),
+ edit = workspaceEdit,
+ },
+ )
+
+}
+
add_missing_imports :: proc(
ast_context: ^AstContext,
selector: ^ast.Selector_Expr,