Skip to content

Commit 41bb701

Browse files
author
winjo
committed
feat: 支持文件和代码搜索配置
1 parent 3515004 commit 41bb701

22 files changed

Lines changed: 730 additions & 400 deletions

File tree

package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,11 @@
136136
"publisher": "alex",
137137
"name": "git-graph",
138138
"version": "1.30.0-2"
139+
},
140+
{
141+
"publisher": "alex",
142+
"name": "image-preview",
143+
"version": "1.53.0-patch.1"
139144
}
140145
]
141146
}

packages/alex/src/api/createApp.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { IPluginConfig } from '@alipay/alex-plugin';
2222
import { deletionLogPath } from '@alipay/alex-browserfs/lib/backend/OverlayFS';
2323

2424
import '../core/extension/extension.patch';
25-
import { disposeMode } from '../core/patch';
25+
import { disposeMode, disposableCollection } from '../core/patch';
2626

2727
import { modules } from '../core/modules';
2828
import { IconSlim, IDETheme } from '../core/extension/metadata';
@@ -104,6 +104,7 @@ export function createApp({ appConfig, runtimeConfig }: IConfig): IAppInstance {
104104
}
105105
destroyed = true;
106106
disposeMode();
107+
disposableCollection.forEach((d) => d(app.injector));
107108
app.injector.disposeAll();
108109
};
109110

packages/alex/src/api/createEditor.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import '@ali/ide-core-browser/lib/style/index.less';
2020
import { IPluginConfig } from '@alipay/alex-plugin';
2121
import { deletionLogPath } from '@alipay/alex-browserfs/lib/backend/OverlayFS';
2222

23-
import { disposeMode } from '../core/patch';
23+
import { disposeMode, disposableCollection } from '../core/patch';
2424
import { getModules } from '../core/editor/modules';
2525
import { mergeConfig } from '../core/utils';
2626
import { EditorLayoutComponent, getEditorLayoutConfig } from '../core/layout';
@@ -86,6 +86,7 @@ export function createEditor({ appConfig, runtimeConfig }: IConfig): IAppInstanc
8686
}
8787
destroyed = true;
8888
disposeMode();
89+
disposableCollection.forEach((d) => d(app.injector));
8990
app.injector.disposeAll();
9091
};
9192

packages/alex/src/core/editor/editor.extension.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,9 @@ class ExtensionServiceImplOverride extends ExtensionServiceImpl {
2020
* TODO: 目前使用私有属性,待升级后改造
2121
*/
2222
async lazyActivate(this: any) {
23-
await this.initBaseData();
24-
this.extensionMetaDataArr = await this.getAllExtensions();
25-
await this.initExtension();
26-
await this.enableAvailableExtensions();
23+
await this.initExtensionMetaData();
24+
await this.initExtensionInstanceData();
25+
await this.runExtensionContributes();
2726
this.doActivate();
2827
}
2928
}

packages/alex/src/core/extension/extension.patch.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import { ExtensionServiceImpl } from '@ali/ide-kaitian-extension/lib/browser/extension.service';
21
import { MainThreadLanguages } from '@ali/ide-kaitian-extension/lib/browser/vscode/api/main.thread.language';
2+
import { AbstractExtInstanceManagementService } from '@ali/ide-kaitian-extension/lib/browser/types';
33

4-
// TODO:待 kaitian 中去掉,临时覆盖掉实现,这样 loader 可移除了
5-
// ExtensionServiceImpl.prototype.initCommonBrowserDependency = () => Promise.resolve();
6-
// ExtensionServiceImpl.prototype.initKaitianBrowserAPIDependency = () => Promise.resolve();
4+
import { disposableCollection } from '../patch';
75

86
// TODO: PR to kaitian, monaco 内会 dispose,先临时 override
97
// @ts-ignore
@@ -22,3 +20,9 @@ MainThreadLanguages.prototype.createSignatureHelpProvider = function (...args: a
2220
};
2321
return provider;
2422
};
23+
24+
disposableCollection.push((injector) => {
25+
(injector.get(
26+
AbstractExtInstanceManagementService
27+
) as AbstractExtInstanceManagementService).dispose();
28+
});

packages/alex/src/core/patch.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22
* 收敛 kaitian 的 patch
33
*/
44

5+
import { Injector } from '@ali/common-di';
56
import { StaticServices } from '@ali/monaco-editor-core/esm/vs/editor/standalone/browser/standaloneServices';
67
import { ModesRegistry } from '@ali/monaco-editor-core/esm/vs/editor/common/modes/modesRegistry';
78
import { DirtyDiffWidget } from '@ali/ide-scm/lib/browser/dirty-diff/dirty-diff-widget';
89
import { AbstractResourcePreferenceProvider } from '@ali/ide-preferences/lib/browser/abstract-resource-preference-provider';
910

11+
export const disposableCollection: ((injector: Injector) => void)[] = [];
12+
1013
// TODO: 不使用 private 如何清除副作用
1114
export const disposeMode = () => {
1215
const modeService: any = StaticServices.modeService;

packages/code-api/src/common/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ export interface ICodeAPIService {
175175
searchFile(
176176
repo: IRepositoryModel,
177177
searchString: string,
178-
options: { limit: number }
178+
options: { limit?: number }
179179
): Promise<string[]>;
180180
/**
181181
* file blame

packages/code-service/src/code-service.contribution.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import { MainLayoutContribution } from '@ali/ide-main-layout';
3535
import configureFileSystem from './filesystem/configure';
3636
import { CodeModelService } from './code-model.service';
3737
import { RefType, ICodeServiceConfig } from './types';
38+
import { Configure } from './config.service';
3839

3940
@Domain(LaunchContribution, BrowserEditorContribution, CommandContribution, MainLayoutContribution)
4041
export class CodeContribution
@@ -82,6 +83,9 @@ export class CodeContribution
8283
@Autowired(ICodeServiceConfig)
8384
codeServiceConfig: ICodeServiceConfig;
8485

86+
@Autowired(Configure)
87+
configure: Configure;
88+
8589
private _unmount: () => void | undefined;
8690

8791
private _mounting = false;
@@ -93,6 +97,9 @@ export class CodeContribution
9397
async launch({ rootFS }: IServerApp) {
9498
if (!this.codeServiceConfig) return;
9599

100+
this.configure.configTextSearch();
101+
this.configure.configFileSearch();
102+
96103
let initMountDefer: Deferred<void> | null = new Deferred();
97104
this.codeModel.rootRepository.onDidChangeCommit(() => {
98105
this.mountFilesystem(rootFS).then(() => {
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import { Autowired, Injectable } from '@ali/common-di';
2+
import { RuntimeConfig } from '@alipay/alex-core';
3+
4+
import { CodeModelService } from './code-model.service';
5+
6+
/**
7+
* 调整 runtimeConfig
8+
*/
9+
@Injectable()
10+
export class Configure {
11+
@Autowired(RuntimeConfig)
12+
runtimeConfig: RuntimeConfig;
13+
14+
@Autowired()
15+
codeModel: CodeModelService;
16+
17+
configTextSearch() {
18+
if (this.runtimeConfig.textSearch) return;
19+
20+
this.runtimeConfig.textSearch = {
21+
config: {
22+
regexp: false,
23+
replace: false,
24+
caseSensitive: 'local',
25+
wordMatch: 'local',
26+
include: 'local',
27+
exclude: 'local',
28+
},
29+
provideResults: async (query, options, progress) => {
30+
const requestResults = await this.codeModel.rootRepository.request.searchContent(
31+
query.pattern,
32+
{
33+
limit: options.maxResults,
34+
}
35+
);
36+
if (!requestResults.length) return;
37+
const searchString = query.pattern.toLowerCase();
38+
const searchStringLen = searchString.length;
39+
requestResults.forEach(({ path, line, content }) => {
40+
const text = content.toLowerCase();
41+
42+
let lastMatchIndex = -searchStringLen;
43+
const matches: [number, number][] = [];
44+
while (
45+
(lastMatchIndex = text.indexOf(searchString, lastMatchIndex + searchStringLen)) !== -1
46+
) {
47+
matches.push([lastMatchIndex, lastMatchIndex + searchStringLen]);
48+
}
49+
if (matches.length) {
50+
progress.report({
51+
path,
52+
lineNumber: line,
53+
preview: {
54+
text: content,
55+
matches,
56+
},
57+
});
58+
}
59+
});
60+
},
61+
};
62+
}
63+
64+
configFileSearch() {
65+
if (this.runtimeConfig.fileSearch) return;
66+
67+
this.runtimeConfig.fileSearch = {
68+
config: {
69+
include: 'local',
70+
exclude: 'local',
71+
},
72+
provideResults: (query, options) => {
73+
return this.codeModel.rootRepository.request.searchFile(query.pattern, {
74+
limit: options.maxResults,
75+
});
76+
},
77+
};
78+
}
79+
}

packages/code-service/src/index.ts

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
11
import { Injectable, Provider } from '@ali/common-di';
22
import { BrowserModule } from '@ali/ide-core-browser';
33
import { extendModule, ModuleConstructor } from '@alipay/alex-core';
4-
import { ContentSearchServerPath } from '@ali/ide-search/lib/common';
5-
import { FileSearchServicePath } from '@ali/ide-file-search/lib/common';
64

7-
import { SearchContribution } from './search/search.contributon';
8-
import { ContentSearchService } from './search/content-search.service';
9-
import { FileSearchService } from './search/file-search.service';
105
import { CodeContribution } from './code-service.contribution';
116
import { CodeStaticResourceContribution } from './static-resource.contribution';
127
import { CodeModelService } from './code-model.service';
@@ -42,18 +37,7 @@ export class CodeServiceModule extends BrowserModule {
4237
CodeStaticResourceContribution,
4338
StatusbarContribution,
4439
DecorationProvider,
45-
SearchContribution,
4640
LineDecorationContribution,
4741
CommandsContribution,
48-
{
49-
token: ContentSearchServerPath,
50-
useClass: ContentSearchService,
51-
override: true,
52-
},
53-
{
54-
token: FileSearchServicePath,
55-
useClass: FileSearchService,
56-
override: true,
57-
},
5842
];
5943
}

0 commit comments

Comments
 (0)