дзеркало
https://github.com/l0ng-ai/openidea.git
синхронізовано 2026-11-09 11:15:40 +02:00
Editor: quick fixes, completion, navigation while typing, and split-pane drag (#109)
* feat(editor): Drag tabs and files between split panes
HTML5 drag and drop never reaches the webview while native file drop is
enabled, so tab, project-file and changelist drags did nothing. They now
run on pointer events:
- Drag an editor tab onto another pane, or onto a pane's edge to split it.
- Drag files from the Project view into an editor pane (center opens them
there, an edge opens them in a new split).
- Drag files between changelists in the Commit view.
- "Drag-and-drop with Alt pressed only" applies to tabs and stripe buttons.
* fix(lsp): Deliver server settings and start servers on a supported JDK
- workspace/configuration answers a server's own section (basedpyright)
from its settings block; basedpyright runs in "standard" mode and keeps
auto search paths on, so `src/` layouts resolve from `tests/`.
- jdtls: formatting follows the editor indent, calls complete without
guessed arguments, and JDK internals stay out of completion.
- `max-java` in a language server config picks an installed JDK no newer
than that (kotlin-language-server fails on JDK 25).
- Server initialization may take up to 5 minutes (first Gradle import).
- `lsp_resend_diagnostics` re-emits stored diagnostics after a reload.
- Spelling only checks declared names (not called methods like
`substring`) and accepts plurals of known software terms.
* feat(editor): Quick fixes, completion and navigation while typing
Quick fixes
- Errors get a red quick-fix bulb; Apply Quick Fix (⌥⇧↵) fixes the most
severe problem at the caret, and the error hover offers the fix directly.
- Code generated by a code action is re-indented to the file's style.
- Python: Implement abstract methods (⌃I or the bulb) from the bases.
- Duplicate code actions are listed once.
Completion
- Overloads sharing a name, and a name importable from several modules,
are no longer merged into one entry.
- Auto-import entries show the module they import from.
- Call snippets without a stop (`new ArrayList<>()`) leave the caret inside
the parentheses with parameter info, or past them when nothing takes
arguments; parameter info also opens after server call snippets.
- The selected item is resolved ahead of acceptance, so its auto-import
is applied (rust-analyzer).
Navigation and diagnostics
- Language server requests wait for pending edits, so Go to Declaration
right after typing answers for the current text; an empty answer right
after an edit is retried while the server catches up.
- Diagnostics come back after a window reload; error underlines stay
visible under typo / unused highlighting.
- Implementation gutter markers no longer refresh in a loop while the
server reports progress.
- A missing alternative server no longer shows as a server error.
* chore(lint): Skip agent worktrees under .claude
* fix(editor): Skip cancelled LSP requests and limit generated-code reformat
- Requests cancelled while waiting for pending edits are not sent.
- Code generated by an action is reformatted per changed hunk, so an added
import doesn't reformat the code between it and the generated lines.
- A long busy spell caused by a settle refresh re-runs it only once.
- Files dropped on a file row of another changelist move to that changelist.
- Python Implement methods: a nested class without bases ends the lookup,
class bodies continue through unindented string lines, and
`@abstractproperty` stubs become `@property`.
- Resend diagnostics goes through the host ops, and custom servers get
`max_java`.
* fix(editor): Rank the exact type first in Java constructor completion
jdtls appends the call or body to filterText (`String(${0})`); matching
on the label instead lets typing `String` rank `String` above
`StringBuilder` and the other types sharing its sort text.
* fix(editor): List identical completion items once
kotlin-language-server repeats a class once per classpath entry declaring
it, so `String()` and `String` were listed three times each.
* fix(editor): Keep the internal cancellation message out of the UI text catalog
Цей коміт міститься в:
1 джерело
48ac2094fc
коміт
357b728f1d
71 files changed
+1630
-197
No files matched your search
@@ -57,6 +57,12 @@ function ensureListening() {
|
||||
});
|
||||
}
|
||||
|
||||
/** Resolves once backend events reach this window's handlers. */
|
||||
export async function ideEventsReady(): Promise<void> {
|
||||
ensureListening();
|
||||
await unlisten;
|
||||
}
|
||||
|
||||
/** Subscribes to one backend event type (or `"*"`); returns an unsubscribe function. */
|
||||
export function onIdeEvent<K extends IdeEvent["type"]>(type: K | "*", handler: (event: EventOf<K>) => void): () => void {
|
||||
ensureListening();
|
||||
|
||||
@@ -82,6 +82,7 @@ export const intellijMacos: Record<string, string[]> = {
|
||||
"code.quickDocumentation": ["F1", "Ctrl+J"],
|
||||
"code.quickDefinition": ["Alt+Space", "Meta+Y"],
|
||||
"code.showIntentions": ["Alt+Enter"],
|
||||
"code.applyQuickFix": ["Alt+Shift+Enter"],
|
||||
"code.reformat": ["Meta+Alt+L"],
|
||||
"code.reformatDialog": ["Meta+Alt+Shift+L"],
|
||||
"code.optimizeImports": ["Ctrl+Alt+O"],
|
||||
|
||||
@@ -83,6 +83,7 @@ export const intellijWindows: Record<string, string[]> = {
|
||||
"code.quickDocumentation": ["Ctrl+Q"],
|
||||
"code.quickDefinition": ["Ctrl+Shift+I"],
|
||||
"code.showIntentions": ["Alt+Enter"],
|
||||
"code.applyQuickFix": ["Alt+Shift+Enter"],
|
||||
"code.reformat": ["Ctrl+Alt+L"],
|
||||
"code.reformatDialog": ["Ctrl+Alt+Shift+L"],
|
||||
"code.optimizeImports": ["Ctrl+Alt+O"],
|
||||
|
||||
@@ -83,6 +83,7 @@ export const vscodeMacos: Record<string, string[]> = {
|
||||
"code.quickDocumentation": ["Meta+K Meta+I"],
|
||||
"code.quickDefinition": ["Alt+F12"],
|
||||
"code.showIntentions": ["Meta+."],
|
||||
"code.applyQuickFix": [],
|
||||
"code.generate": [],
|
||||
"code.reformat": ["Alt+Shift+F"],
|
||||
"code.reformatDialog": [],
|
||||
|
||||
@@ -3141,6 +3141,10 @@
|
||||
"The file changed; rename cancelled": "文件已更改,重命名已取消",
|
||||
"No suggestions": "无建议",
|
||||
"No intentions available": "没有可用的意图操作",
|
||||
"No quick fixes available": "没有可用的快速修复",
|
||||
"No abstract methods to implement": "没有需要实现的抽象方法",
|
||||
"Implement abstract methods": "实现抽象方法",
|
||||
"Apply Quick Fix": "应用快速修复",
|
||||
"The document changed; invoke the refactoring again": "文档已更改,请重新调用重构",
|
||||
"The document changed; the name was not applied": "文档已更改,名称未应用",
|
||||
"The file changed; Safe Delete cancelled": "文件已更改,安全删除已取消",
|
||||
|
||||
Reference in new issue
Заблокувати користувача