Файли
openidea/src/features/index.ts
T
l0ng-ai 1e00ea5ee2 feat: Third pass aligning core experience with IntelliJ IDEA
Project & files
- Project view modes (Project Files / Open Files / All Changed Files /
  Scratches); External Libraries for Python, JDK (src.zip), Node, Cargo, Go,
  Maven/Gradle jars; read-only jar/zip browsing
- ⌘N New popup with type search and more file kinds; New Project, Rename
  Project, Reload All from Disk, Export/Import Settings, Power Save Mode
- File type associations, extra content roots and exclude patterns (indexed
  and watched without reopening the project)

Editor & navigation
- Find bar: search scope (comments/strings), Preserve Case, Exclude, multiline,
  history; Find in Files: Module scope, custom pattern scopes, multiline
- Search Everywhere filters, Assign Shortcut, settings results; named bookmark
  lists, file/folder bookmarks; Structure filters and Show Inherited; Recent
  Locations timestamps and breadcrumbs; Code Vision author
- Completion options, editor tab placement/layout, inline completion (LSP 3.18)
- Spell checking (Typo inspection, ide-spell) and Inspections settings with
  custom profiles; Code Style schemes, formatter markers, Do not format

Run, VCS, services, database
- Typed run configurations (Shell, Program, npm, Gradle, Maven, Docker,
  Compound), Modify options, Before launch, env dialog, Current File,
  Emulate terminal (PTY)
- Git log graph/view options, Go to Hash/Branch/Tag, date filter keeps the
  graph; Pull/Merge/Rebase dialogs, Manage Remotes, Worktrees
- Generic Services host (Docker connections/registries, run sessions); TODO
  scope/changes tabs with changelists; Coverage report import
- Data sources: wire-compatible vendors, URL import, SSL certs, Options,
  Schemas and Advanced tabs, color and comment

Workbench
- Run Anything, Customize Main Toolbar, named tool window layouts, menu
  completeness, Code Cleanup, macros, "Don't Show Again", editor banners
- Chinese translations for the new UI

Claude-Session: https://claude.ai/code/session_01SaPPsVPuk6ZTNsoUCNCbMv
2026-10-25 21:24:00 +08:00

115 рядки
4.0 KiB
TypeScript

/**
* Feature activation. Each feature exports `activate(): void | (() => void)`
* that registers actions, tool windows, status items and services, returning
* a disposer. The editor goes first because it provides the editor service.
*/
import { activate as editor } from "@/editor/core";
import { activate as editorLsp } from "@/editor/lsp";
import { activate as welcome } from "./welcome";
import { activate as projectTree } from "./project-tree";
import { activate as search } from "./search";
import { activate as codeInsight } from "./code-insight";
import { activate as vcs } from "./vcs";
import { activate as terminal } from "./terminal";
import { activate as run } from "./run";
import { activate as runAnything } from "./run-anything";
import { activate as macros } from "./macros";
import { activate as debuggerFeature } from "./debugger";
import { activate as coverage } from "./coverage";
import { activate as profiler } from "./profiler";
import { activate as buildTools } from "./build-tools";
import { activate as build } from "./build";
import { activate as templates, activateSettingsPages as templatesPages } from "./templates";
import { activate as todo, activateSettingsPages as todoPages } from "./todo";
import { activate as settings, activateSettingsWindow } from "./settings";
import { activate as app, activateLocale as appLocale } from "./app";
import { activate as perf } from "./perf";
import { activate as plugins, activateSettingsPages as pluginsPages } from "./plugins";
import { activate as tools, activateSettingsPages as toolsPages } from "./tools";
import { activate as scratch } from "./scratch";
import { activate as libraries } from "./libraries";
import { activate as viewers } from "./viewers";
import { activate as web } from "./web";
import { activate as analysis } from "./analysis";
import { activate as services } from "./services";
import { activate as github } from "./github";
import { activate as httpClient } from "./http-client";
import { activate as database } from "./database";
type Activate = () => void | (() => void);
const features: Array<[string, Activate]> = [
["editor", editor],
["editor-lsp", editorLsp],
["welcome", welcome],
["project-tree", projectTree],
["search", search],
["code-insight", codeInsight],
["vcs", vcs],
["terminal", terminal],
["run", run],
["run-anything", runAnything],
["macros", macros],
["debugger", debuggerFeature],
["coverage", coverage],
["profiler", profiler],
["build-tools", buildTools],
["build", build],
["templates", templates],
["todo", todo],
["settings", settings],
["app", app],
["perf", perf],
["plugins", plugins],
["tools", tools],
["scratch", scratch],
["libraries", libraries],
["viewers", viewers],
["web", web],
["analysis", analysis],
["services", services],
["github", github],
["http-client", httpClient],
["database", database],
];
export function activateFeatures(): () => void {
const disposers: Array<() => void> = [];
for (const [name, activate] of features) {
try {
const d = activate();
if (d) disposers.push(d);
} catch (e) {
console.error(`feature ${name} failed to activate`, e);
}
}
return () => disposers.reverse().forEach((d) => d());
}
export { SettingsWindow, settingsWindowParent } from "./settings";
/**
* The native Settings window of project window `parent`: only the settings
* pages (no workbench, project, editors or background services).
*/
export function activateSettingsWindowFeatures(parent: string): () => void {
const pages: Array<[string, Activate]> = [
["locale", appLocale],
["settings", () => activateSettingsWindow(parent)],
["templates", templatesPages],
["todo", todoPages],
["plugins", pluginsPages],
["tools", toolsPages],
];
const disposers: Array<() => void> = [];
for (const [name, activate] of pages) {
try {
const d = activate();
if (d) disposers.push(d);
} catch (e) {
console.error(`settings pages of ${name} failed to activate`, e);
}
}
return () => disposers.reverse().forEach((d) => d());
}