Skip to content

Commit 2915ad6

Browse files
author
winjo
committed
fix(acr): 修复 codeServiceEditor 等问题
1 parent 7ab474b commit 2915ad6

12 files changed

Lines changed: 1858 additions & 2320 deletions

File tree

packages/acr/src/antcode-cr.tsx

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@ import { Injector } from '@ali/common-di';
44
import { URI } from '@ali/ide-core-common';
55
import { join } from '@ali/ide-core-common/lib/path';
66
import { equals } from '@ali/ide-core-common/lib/arrays';
7-
import { RuntimeConfig } from '@alipay/alex-core';
7+
import {
8+
RuntimeConfig,
9+
codeServiceEditor,
10+
MonacoCodeService,
11+
IMonacoCodeService,
12+
} from '@alipay/alex-core';
813
// internal patched
914
import { disposeMode } from '@alipay/alex/lib/core/patch';
1015

@@ -26,6 +31,7 @@ import { logPv } from './utils/tracert';
2631
import { RootElementId } from './constant';
2732
import { Portals } from './portal';
2833
import { reportUserAccess } from './utils/monitor';
34+
import { CommentsZoneWidgetPatch, CommentsZoneWidget } from './overrides/comments-zone.view';
2935

3036
const { version } = require('../package.json');
3137

@@ -55,8 +61,22 @@ const AntcodeCR: React.FC<IAntcodeCRProps> = (props) => {
5561
{
5662
token: RuntimeConfig,
5763
useValue: {},
64+
},
65+
{
66+
token: MonacoCodeService,
67+
useValue: codeServiceEditor,
68+
},
69+
{
70+
token: IMonacoCodeService,
71+
useClass: MonacoCodeService,
72+
override: true,
73+
},
74+
{
75+
token: CommentsZoneWidget,
76+
useClass: CommentsZoneWidgetPatch,
5877
}
5978
);
79+
6080
render(
6181
injector,
6282
workspaceDir,
@@ -84,6 +104,9 @@ const AntcodeCR: React.FC<IAntcodeCRProps> = (props) => {
84104
);
85105
}
86106

107+
// 保持 codeServiceEditor 单例,且组件每次实例化重新赋值
108+
const clearInjector = codeServiceEditor.setInjector(injector);
109+
87110
// spm 曝光埋点
88111
logPv('a1654', 'b23008');
89112
// 记录用户访问信息,包括 pr 维度的 pv, uv
@@ -98,6 +121,7 @@ const AntcodeCR: React.FC<IAntcodeCRProps> = (props) => {
98121
const realInjector = injector$.current;
99122
if (realInjector) {
100123
disposeMode();
124+
clearInjector();
101125
realInjector.disposeAll();
102126
}
103127
ReactDOM.unmountComponentAtNode(container$!.current!);

packages/acr/src/modules/git-scheme/resource-provider/git.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export class GitResourceProvider implements IResourceProvider {
1515
labelService: LabelService;
1616

1717
provideResource(uri: URI) {
18-
const path = uri.withoutScheme().toString(true);
18+
const path = uri.withoutQuery().withoutScheme().toString(true);
1919
return Promise.all([
2020
this.getFileStat(uri.toString()),
2121
// 移除特殊的 / 开头

packages/acr/src/modules/merge-request/changes-tree/changes-tree-model.service.ts

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,11 @@ export class ChangesTreeModelService extends WithEventBus {
171171

172172
private showProgress(promise: Promise<any>) {
173173
// 展示一个进度条
174-
this.progressService.withProgress({ location: ChangesTreeViewId }, async () => {
175-
return promise;
174+
// 延迟更新,否则在组件中更新会引起 react warning
175+
setTimeout(() => {
176+
this.progressService.withProgress({ location: ChangesTreeViewId }, async () => {
177+
return promise;
178+
});
176179
});
177180
}
178181

@@ -247,12 +250,8 @@ export class ChangesTreeModelService extends WithEventBus {
247250
const type = isTreeMode ? ChangesTreeTypes.Tree : ChangesTreeTypes.List;
248251
const preType = !isTreeMode ? ChangesTreeTypes.Tree : ChangesTreeTypes.List;
249252
if (this.changesTreeModelMap.has(type)) {
250-
const {
251-
treeModel,
252-
decorations,
253-
selectedDecoration,
254-
focusedDecoration,
255-
} = this.changesTreeModelMap.get(type)!;
253+
const { treeModel, decorations, selectedDecoration, focusedDecoration } =
254+
this.changesTreeModelMap.get(type)!;
256255
this._activeTreeModel = treeModel;
257256
this._activeDecorations = decorations;
258257
this._selectedDecoration = selectedDecoration;
@@ -388,10 +387,8 @@ export class ChangesTreeModelService extends WithEventBus {
388387
};
389388

390389
private persistFileSelection(preType: ChangesTreeTypes) {
391-
const {
392-
selectedDecoration: preSelectedDecoration,
393-
focusedDecoration: preFocusedDecoration,
394-
} = this.changesTreeModelMap.get(preType)!;
390+
const { selectedDecoration: preSelectedDecoration, focusedDecoration: preFocusedDecoration } =
391+
this.changesTreeModelMap.get(preType)!;
395392

396393
// 切换时需要同步decoration状态,默认只取第一个选中的文件
397394
const file = this.selectedFiles[0];
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { Injectable } from '@ali/common-di';
2+
import { Event } from '@ali/ide-core-common';
3+
import { CommentsZoneWidget } from '@ali/ide-comments/lib/browser/comments-zone.view';
4+
import type { ICommentsThread } from '@ali/ide-comments/lib/common';
5+
import { IEditor } from '@ali/ide-editor';
6+
7+
export { CommentsZoneWidget };
8+
9+
// 临时修复
10+
@Injectable({ multiple: true })
11+
export class CommentsZoneWidgetPatch extends CommentsZoneWidget {
12+
constructor(editor: IEditor, thread: ICommentsThread) {
13+
const { monacoEditor } = editor;
14+
monacoEditor.onDidChangeConfiguration = Event.map(
15+
monacoEditor.onDidChangeConfiguration,
16+
(e) => {
17+
e.hasChanged = e.hasChanged.bind(e);
18+
return e;
19+
}
20+
);
21+
super(editor, thread);
22+
}
23+
}

packages/acr/src/overrides/doc-client.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
import { Injectable, Autowired } from '@ali/common-di';
22
import { IFileSchemeDocClient, IContentChange, ISavingContent } from '@ali/ide-file-scheme';
3-
import { IEditorDocumentModelSaveResult, IEditorDocumentEditChange } from '@ali/ide-core-browser';
3+
import {
4+
IEditorDocumentModelSaveResult,
5+
IEditorDocumentEditChange,
6+
TextDocumentContentChangeEvent,
7+
} from '@ali/ide-core-browser';
48
import { IFileServiceClient } from '@ali/ide-file-service';
5-
import { TextDocumentContentChangeEvent, Range } from 'vscode-languageserver-types';
9+
import { Range } from 'vscode-languageserver-types';
610
import md5 from 'md5';
711

812
/**

packages/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"lockfile": "enable"
2020
},
2121
"dependencies": {
22-
"@ali/common-di": "^5.2.2",
22+
"@ali/common-di": "^5.3.1",
2323
"@ali/ide-core-browser": "2.5.5",
2424
"@ali/ide-core-common": "2.5.5",
2525
"@ali/ide-debug": "2.5.5",

packages/core/src/client/extension-manager/extension-detail.view.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { Markdown } from '@ali/ide-markdown';
1010
import { observer } from 'mobx-react-lite';
1111
import * as React from 'react';
1212
import { ExtensionDetail, IExtensionManagerService } from './base';
13-
import * as clx from 'classnames';
13+
import clx from 'classnames';
1414
import * as styles from './extension-detail.module.less';
1515
import * as commonStyles from './common.module.less';
1616
import { Tabs } from '@ali/ide-components';

packages/core/src/client/extension-manager/extension-list/index.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as React from 'react';
2-
import * as clx from 'classnames';
2+
import clx from 'classnames';
33
import { ProgressBar } from '@ali/ide-core-browser/lib/components/progressbar';
44
import { RawExtensionView } from '../raw-extension';
55
import { RawExtension, IExtensionManagerService } from '../base';
@@ -21,9 +21,8 @@ export interface ExtensionListProps {
2121
export const ExtensionList: React.FC<ExtensionListProps> = observer(
2222
({ height, loading = false, list, empty, onReachBottom, showExtraAction = true }) => {
2323
const [selectExtensionId, setSelectExtensionId] = React.useState('');
24-
const extensionManagerService = useInjectable<ExtensionManagerService>(
25-
IExtensionManagerService
26-
);
24+
const extensionManagerService =
25+
useInjectable<ExtensionManagerService>(IExtensionManagerService);
2726

2827
function select(extension: RawExtension, isDouble: boolean) {
2928
setSelectExtensionId(extension.extensionId);

packages/core/src/client/extension-manager/raw-extension/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as React from 'react';
22
import { localize } from '@ali/ide-core-browser';
3-
import * as clx from 'classnames';
3+
import clx from 'classnames';
44
import { observer } from 'mobx-react-lite';
55
import { RawExtension } from '../base';
66
import * as commonStyles from '../common.module.less';

packages/core/src/client/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ import {
3636
import { BreadCrumbServiceImplOverride, IBreadCrumbService } from './override/breadcrumb.service';
3737
import { SearchContribution } from './search/index.contribution';
3838

39+
export * from './override/codeEditorService';
40+
3941
export { ExtensionManagerModule as ExtensionClientManagerModule } from './extension-manager';
4042

4143
export * from './extension';

0 commit comments

Comments
 (0)