@theia/scm 1.48.2 → 1.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/lib/browser/decorations/scm-decorations-service.d.ts +9 -3
  2. package/lib/browser/decorations/scm-decorations-service.d.ts.map +1 -1
  3. package/lib/browser/decorations/scm-decorations-service.js +50 -30
  4. package/lib/browser/decorations/scm-decorations-service.js.map +1 -1
  5. package/lib/browser/dirty-diff/content-lines.d.ts +2 -0
  6. package/lib/browser/dirty-diff/content-lines.d.ts.map +1 -1
  7. package/lib/browser/dirty-diff/content-lines.js +7 -0
  8. package/lib/browser/dirty-diff/content-lines.js.map +1 -1
  9. package/lib/browser/dirty-diff/diff-computer.d.ts +23 -14
  10. package/lib/browser/dirty-diff/diff-computer.d.ts.map +1 -1
  11. package/lib/browser/dirty-diff/diff-computer.js +91 -27
  12. package/lib/browser/dirty-diff/diff-computer.js.map +1 -1
  13. package/lib/browser/dirty-diff/diff-computer.spec.js +120 -52
  14. package/lib/browser/dirty-diff/diff-computer.spec.js.map +1 -1
  15. package/lib/browser/dirty-diff/dirty-diff-decorator.d.ts +5 -3
  16. package/lib/browser/dirty-diff/dirty-diff-decorator.d.ts.map +1 -1
  17. package/lib/browser/dirty-diff/dirty-diff-decorator.js +14 -7
  18. package/lib/browser/dirty-diff/dirty-diff-decorator.js.map +1 -1
  19. package/lib/browser/dirty-diff/dirty-diff-module.d.ts.map +1 -1
  20. package/lib/browser/dirty-diff/dirty-diff-module.js +9 -0
  21. package/lib/browser/dirty-diff/dirty-diff-module.js.map +1 -1
  22. package/lib/browser/dirty-diff/dirty-diff-navigator.d.ts +49 -0
  23. package/lib/browser/dirty-diff/dirty-diff-navigator.d.ts.map +1 -0
  24. package/lib/browser/dirty-diff/dirty-diff-navigator.js +292 -0
  25. package/lib/browser/dirty-diff/dirty-diff-navigator.js.map +1 -0
  26. package/lib/browser/dirty-diff/dirty-diff-widget.d.ts +47 -0
  27. package/lib/browser/dirty-diff/dirty-diff-widget.d.ts.map +1 -0
  28. package/lib/browser/dirty-diff/dirty-diff-widget.js +320 -0
  29. package/lib/browser/dirty-diff/dirty-diff-widget.js.map +1 -0
  30. package/lib/browser/scm-colors.d.ts +6 -0
  31. package/lib/browser/scm-colors.d.ts.map +1 -0
  32. package/lib/browser/scm-colors.js +25 -0
  33. package/lib/browser/scm-colors.js.map +1 -0
  34. package/lib/browser/scm-contribution.d.ts +20 -6
  35. package/lib/browser/scm-contribution.d.ts.map +1 -1
  36. package/lib/browser/scm-contribution.js +112 -22
  37. package/lib/browser/scm-contribution.js.map +1 -1
  38. package/lib/browser/scm-tree-widget.js +1 -1
  39. package/lib/browser/scm-tree-widget.js.map +1 -1
  40. package/package.json +8 -6
  41. package/src/browser/decorations/scm-decorations-service.ts +60 -36
  42. package/src/browser/dirty-diff/content-lines.ts +9 -0
  43. package/src/browser/dirty-diff/diff-computer.spec.ts +120 -52
  44. package/src/browser/dirty-diff/diff-computer.ts +88 -40
  45. package/src/browser/dirty-diff/dirty-diff-decorator.ts +17 -10
  46. package/src/browser/dirty-diff/dirty-diff-module.ts +9 -0
  47. package/src/browser/dirty-diff/dirty-diff-navigator.ts +288 -0
  48. package/src/browser/dirty-diff/dirty-diff-widget.ts +364 -0
  49. package/src/browser/scm-colors.ts +21 -0
  50. package/src/browser/scm-contribution.ts +97 -6
  51. package/src/browser/scm-tree-widget.tsx +1 -1
  52. package/src/browser/style/dirty-diff-decorator.css +2 -1
@@ -1,5 +1,5 @@
1
- import { ResourceProvider } from '@theia/core';
2
- import { DirtyDiffDecorator } from '../dirty-diff/dirty-diff-decorator';
1
+ import { Emitter, Event, ResourceProvider } from '@theia/core';
2
+ import { DirtyDiffDecorator, DirtyDiffUpdate } from '../dirty-diff/dirty-diff-decorator';
3
3
  import { EditorManager, TextEditor } from '@theia/editor/lib/browser';
4
4
  import { ScmService } from '../scm-service';
5
5
  export declare class ScmDecorationsService {
@@ -8,8 +8,14 @@ export declare class ScmDecorationsService {
8
8
  protected readonly editorManager: EditorManager;
9
9
  protected readonly resourceProvider: ResourceProvider;
10
10
  private readonly diffComputer;
11
- private dirtyState;
11
+ protected readonly onDirtyDiffUpdateEmitter: Emitter<DirtyDiffUpdate>;
12
+ readonly onDirtyDiffUpdate: Event<DirtyDiffUpdate>;
12
13
  constructor(decorator: DirtyDiffDecorator, scmService: ScmService, editorManager: EditorManager, resourceProvider: ResourceProvider);
13
14
  applyEditorDecorations(editor: TextEditor): Promise<void>;
15
+ protected supportsDirtyDiff(editor: TextEditor): boolean;
16
+ protected createUpdateTask(editor: TextEditor): {
17
+ (): void;
18
+ cancel(): void;
19
+ };
14
20
  }
15
21
  //# sourceMappingURL=scm-decorations-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scm-decorations-service.d.ts","sourceRoot":"","sources":["../../../src/browser/decorations/scm-decorations-service.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAGxE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,qBACa,qBAAqB;IAIU,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,kBAAkB;IAChE,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU;IACtC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa;IAC5C,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IANnF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,UAAU,CAAiB;gBAEwB,SAAS,EAAE,kBAAkB,EAC7C,UAAU,EAAE,UAAU,EACnB,aAAa,EAAE,aAAa,EACzB,gBAAgB,EAAE,gBAAgB;IAyB7E,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAoBlE"}
1
+ {"version":3,"file":"scm-decorations-service.d.ts","sourceRoot":"","sources":["../../../src/browser/decorations/scm-decorations-service.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAwB,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAGzF,OAAO,EAAE,aAAa,EAAgB,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAI5C,qBACa,qBAAqB;IAOE,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,kBAAkB;IACxD,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU;IACtC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa;IAC5C,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IATnF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IAEnD,SAAS,CAAC,QAAQ,CAAC,wBAAwB,2BAAkC;IAC7E,QAAQ,CAAC,iBAAiB,EAAE,KAAK,CAAC,eAAe,CAAC,CAAuC;gBAGtC,SAAS,EAAE,kBAAkB,EACrC,UAAU,EAAE,UAAU,EACnB,aAAa,EAAE,aAAa,EACzB,gBAAgB,EAAE,gBAAgB;IA+B7E,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B/D,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAIxD,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG;QAAE,IAAI,IAAI,CAAC;QAAC,MAAM,IAAI,IAAI,CAAC;KAAE;CAGhF"}
@@ -24,58 +24,78 @@ const diff_computer_1 = require("../dirty-diff/diff-computer");
24
24
  const content_lines_1 = require("../dirty-diff/content-lines");
25
25
  const browser_1 = require("@theia/editor/lib/browser");
26
26
  const scm_service_1 = require("../scm-service");
27
+ const throttle = require("@theia/core/shared/lodash.throttle");
27
28
  let ScmDecorationsService = class ScmDecorationsService {
28
29
  constructor(decorator, scmService, editorManager, resourceProvider) {
29
30
  this.decorator = decorator;
30
31
  this.scmService = scmService;
31
32
  this.editorManager = editorManager;
32
33
  this.resourceProvider = resourceProvider;
33
- this.dirtyState = true;
34
34
  this.diffComputer = new diff_computer_1.DiffComputer();
35
- this.editorManager.onCreated(async (editor) => this.applyEditorDecorations(editor.editor));
36
- this.scmService.onDidAddRepository(repository => repository.provider.onDidChange(() => {
37
- const editor = this.editorManager.currentEditor;
38
- if (editor) {
39
- if (this.dirtyState) {
40
- this.applyEditorDecorations(editor.editor);
41
- this.dirtyState = false;
42
- }
43
- else {
44
- /** onDidChange event might be called several times one after another, so need to prevent repeated events. */
45
- setTimeout(() => {
46
- this.dirtyState = true;
47
- }, 500);
48
- }
35
+ this.onDirtyDiffUpdateEmitter = new core_1.Emitter();
36
+ this.onDirtyDiffUpdate = this.onDirtyDiffUpdateEmitter.event;
37
+ const updateTasks = new Map();
38
+ this.editorManager.onCreated(editorWidget => {
39
+ const { editor } = editorWidget;
40
+ if (!this.supportsDirtyDiff(editor)) {
41
+ return;
49
42
  }
50
- }));
51
- this.scmService.onDidChangeSelectedRepository(() => {
52
- const editor = this.editorManager.currentEditor;
53
- if (editor) {
54
- this.applyEditorDecorations(editor.editor);
43
+ const toDispose = new core_1.DisposableCollection();
44
+ const updateTask = this.createUpdateTask(editor);
45
+ updateTasks.set(editorWidget, updateTask);
46
+ toDispose.push(editor.onDocumentContentChanged(() => updateTask()));
47
+ editorWidget.disposed.connect(() => {
48
+ updateTask.cancel();
49
+ updateTasks.delete(editorWidget);
50
+ toDispose.dispose();
51
+ });
52
+ updateTask();
53
+ });
54
+ const runUpdateTasks = () => {
55
+ for (const updateTask of updateTasks.values()) {
56
+ updateTask();
55
57
  }
58
+ };
59
+ this.scmService.onDidAddRepository(({ provider }) => {
60
+ var _a;
61
+ provider.onDidChange(runUpdateTasks);
62
+ (_a = provider.onDidChangeResources) === null || _a === void 0 ? void 0 : _a.call(provider, runUpdateTasks);
56
63
  });
64
+ this.scmService.onDidChangeSelectedRepository(runUpdateTasks);
57
65
  }
58
66
  async applyEditorDecorations(editor) {
59
67
  const currentRepo = this.scmService.selectedRepository;
60
68
  if (currentRepo) {
61
69
  try {
62
- const uri = editor.uri.withScheme(currentRepo.provider.id).withQuery(`{"ref":"", "path":"${editor.uri.path.toString()}"}`);
70
+ // Currently, the uri used here is specific to vscode.git; other SCM providers are thus not supported.
71
+ // See https://github.com/eclipse-theia/theia/pull/13104#discussion_r1494540628 for a detailed discussion.
72
+ const query = { path: editor.uri['codeUri'].fsPath, ref: '~' };
73
+ const uri = editor.uri.withScheme(currentRepo.provider.id).withQuery(JSON.stringify(query));
63
74
  const previousResource = await this.resourceProvider(uri);
64
- const previousContent = await previousResource.readContents();
65
- const previousLines = content_lines_1.ContentLines.fromString(previousContent);
66
- const currentResource = await this.resourceProvider(editor.uri);
67
- const currentContent = await currentResource.readContents();
68
- const currentLines = content_lines_1.ContentLines.fromString(currentContent);
69
- const { added, removed, modified } = this.diffComputer.computeDirtyDiff(content_lines_1.ContentLines.arrayLike(previousLines), content_lines_1.ContentLines.arrayLike(currentLines));
70
- this.decorator.applyDecorations({ editor: editor, added, removed, modified });
71
- currentResource.dispose();
72
- previousResource.dispose();
75
+ try {
76
+ const previousContent = await previousResource.readContents();
77
+ const previousLines = content_lines_1.ContentLines.fromString(previousContent);
78
+ const currentLines = content_lines_1.ContentLines.fromTextEditorDocument(editor.document);
79
+ const dirtyDiff = this.diffComputer.computeDirtyDiff(content_lines_1.ContentLines.arrayLike(previousLines), content_lines_1.ContentLines.arrayLike(currentLines));
80
+ const update = { editor, previousRevisionUri: uri, ...dirtyDiff };
81
+ this.decorator.applyDecorations(update);
82
+ this.onDirtyDiffUpdateEmitter.fire(update);
83
+ }
84
+ finally {
85
+ previousResource.dispose();
86
+ }
73
87
  }
74
88
  catch (e) {
75
89
  // Scm resource may not be found, do nothing.
76
90
  }
77
91
  }
78
92
  }
93
+ supportsDirtyDiff(editor) {
94
+ return editor.shouldDisplayDirtyDiff();
95
+ }
96
+ createUpdateTask(editor) {
97
+ return throttle(() => this.applyEditorDecorations(editor), 500);
98
+ }
79
99
  };
80
100
  ScmDecorationsService = (0, tslib_1.__decorate)([
81
101
  (0, inversify_1.injectable)(),
@@ -1 +1 @@
1
- {"version":3,"file":"scm-decorations-service.js","sourceRoot":"","sources":["../../../src/browser/decorations/scm-decorations-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scm-decorations-service.js","sourceRoot":"","sources":["../../../src/browser/decorations/scm-decorations-service.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { TextEditorDocument } from '@theia/editor/lib/browser';
1
2
  export interface ContentLines extends ArrayLike<string> {
2
3
  readonly length: number;
3
4
  getLineContent: (line: number) => string;
@@ -8,6 +9,7 @@ export interface ContentLinesArrayLike extends ContentLines, ArrayLike<string> {
8
9
  }
9
10
  export declare namespace ContentLines {
10
11
  function fromString(content: string): ContentLines;
12
+ function fromTextEditorDocument(document: TextEditorDocument): ContentLines;
11
13
  function arrayLike(lines: ContentLines): ContentLinesArrayLike;
12
14
  }
13
15
  //# sourceMappingURL=content-lines.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"content-lines.d.ts","sourceRoot":"","sources":["../../../src/browser/dirty-diff/content-lines.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,YAAa,SAAQ,SAAS,CAAC,MAAM,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC5C;AAED,MAAM,WAAW,qBAAsB,SAAQ,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC;IAC1E,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAClD,QAAQ,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AAED,yBAAiB,YAAY,CAAC;IAI1B,SAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAmCxD;IAED,SAAgB,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,qBAAqB,CAEpE;CA0CJ"}
1
+ {"version":3,"file":"content-lines.d.ts","sourceRoot":"","sources":["../../../src/browser/dirty-diff/content-lines.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,WAAW,YAAa,SAAQ,SAAS,CAAC,MAAM,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC5C;AAED,MAAM,WAAW,qBAAsB,SAAQ,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC;IAC1E,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAClD,QAAQ,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AAED,yBAAiB,YAAY,CAAC;IAI1B,SAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAmCxD;IAED,SAAgB,sBAAsB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,YAAY,CAKjF;IAED,SAAgB,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,qBAAqB,CAEpE;CA0CJ"}
@@ -58,6 +58,13 @@ var ContentLines;
58
58
  };
59
59
  }
60
60
  ContentLines.fromString = fromString;
61
+ function fromTextEditorDocument(document) {
62
+ return {
63
+ length: document.lineCount,
64
+ getLineContent: line => document.getLineContent(line + 1),
65
+ };
66
+ }
67
+ ContentLines.fromTextEditorDocument = fromTextEditorDocument;
61
68
  function arrayLike(lines) {
62
69
  return new Proxy(lines, getProxyHandler());
63
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"content-lines.js","sourceRoot":"","sources":["../../../src/browser/dirty-diff/content-lines.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"content-lines.js","sourceRoot":"","sources":["../../../src/browser/dirty-diff/content-lines.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { ContentLinesArrayLike } from './content-lines';
2
+ import { Position, Range } from '@theia/core/shared/vscode-languageserver-protocol';
2
3
  export declare class DiffComputer {
3
4
  computeDiff(previous: ContentLinesArrayLike, current: ContentLinesArrayLike): DiffResult[];
4
5
  computeDirtyDiff(previous: ContentLinesArrayLike, current: ContentLinesArrayLike): DirtyDiff;
@@ -10,21 +11,29 @@ export interface DiffResult {
10
11
  removed?: boolean;
11
12
  }
12
13
  export interface DirtyDiff {
13
- /**
14
- * Lines added by comparison to previous revision.
15
- */
16
- readonly added: LineRange[];
17
- /**
18
- * Lines, after which lines were removed by comparison to previous revision.
19
- */
20
- readonly removed: number[];
21
- /**
22
- * Lines modified by comparison to previous revision.
23
- */
24
- readonly modified: LineRange[];
14
+ readonly changes: readonly Change[];
15
+ }
16
+ export interface Change {
17
+ readonly previousRange: LineRange;
18
+ readonly currentRange: LineRange;
19
+ }
20
+ export declare namespace Change {
21
+ function isAddition(change: Change): boolean;
22
+ function isRemoval(change: Change): boolean;
23
+ function isModification(change: Change): boolean;
25
24
  }
26
25
  export interface LineRange {
27
- start: number;
28
- end: number;
26
+ readonly start: number;
27
+ readonly end: number;
28
+ }
29
+ export declare namespace LineRange {
30
+ function create(start: number, end: number): LineRange;
31
+ function createSingleLineRange(line: number): LineRange;
32
+ function createEmptyLineRange(line: number): LineRange;
33
+ function isEmpty(range: LineRange): boolean;
34
+ function getStartPosition(range: LineRange): Position;
35
+ function getEndPosition(range: LineRange): Position;
36
+ function toRange(range: LineRange): Range;
37
+ function getLineCount(range: LineRange): number;
29
38
  }
30
39
  //# sourceMappingURL=diff-computer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff-computer.d.ts","sourceRoot":"","sources":["../../../src/browser/dirty-diff/diff-computer.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,qBAAa,YAAY;IAErB,WAAW,CAAC,QAAQ,EAAE,qBAAqB,EAAE,OAAO,EAAE,qBAAqB,GAAG,UAAU,EAAE;IAK1F,gBAAgB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,OAAO,EAAE,qBAAqB,GAAG,SAAS;CAiD/F;AA4BD,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACtB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACf"}
1
+ {"version":3,"file":"diff-computer.d.ts","sourceRoot":"","sources":["../../../src/browser/dirty-diff/diff-computer.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAY,MAAM,mDAAmD,CAAC;AAE9F,qBAAa,YAAY;IAErB,WAAW,CAAC,QAAQ,EAAE,qBAAqB,EAAE,OAAO,EAAE,qBAAqB,GAAG,UAAU,EAAE;IAK1F,gBAAgB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,OAAO,EAAE,qBAAqB,GAAG,SAAS;CAiD/F;AAiCD,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,MAAM;IACnB,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;CACpC;AAED,yBAAiB,MAAM,CAAC;IACpB,SAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAElD;IACD,SAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEjD;IACD,SAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEtD;CACJ;AAED,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACxB;AAED,yBAAiB,SAAS,CAAC;IACvB,SAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAK5D;IACD,SAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAE7D;IACD,SAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAE5D;IACD,SAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAEjD;IACD,SAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAK3D;IACD,SAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAKzD;IACD,SAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK,CAE/C;IACD,SAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAErD;CACJ"}
@@ -15,65 +15,66 @@
15
15
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
16
  // *****************************************************************************
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.DiffComputer = void 0;
18
+ exports.LineRange = exports.Change = exports.DiffComputer = void 0;
19
19
  const jsdiff = require("diff");
20
+ const vscode_languageserver_protocol_1 = require("@theia/core/shared/vscode-languageserver-protocol");
20
21
  class DiffComputer {
21
22
  computeDiff(previous, current) {
22
23
  const diffResult = diffArrays(previous, current);
23
24
  return diffResult;
24
25
  }
25
26
  computeDirtyDiff(previous, current) {
26
- const added = [];
27
- const removed = [];
28
- const modified = [];
29
- const changes = this.computeDiff(previous, current);
30
- let lastLine = -1;
31
- for (let i = 0; i < changes.length; i++) {
32
- const change = changes[i];
33
- const next = changes[i + 1];
27
+ const changes = [];
28
+ const diffResult = this.computeDiff(previous, current);
29
+ let currentRevisionLine = -1;
30
+ let previousRevisionLine = -1;
31
+ for (let i = 0; i < diffResult.length; i++) {
32
+ const change = diffResult[i];
33
+ const next = diffResult[i + 1];
34
34
  if (change.added) {
35
35
  // case: addition
36
- const start = lastLine + 1;
37
- const end = lastLine + change.count;
38
- added.push({ start, end });
39
- lastLine = end;
36
+ changes.push({ previousRange: LineRange.createEmptyLineRange(previousRevisionLine + 1), currentRange: toLineRange(change) });
37
+ currentRevisionLine += change.count;
40
38
  }
41
39
  else if (change.removed && next && next.added) {
42
40
  const isFirstChange = i === 0;
43
- const isLastChange = i === changes.length - 2;
41
+ const isLastChange = i === diffResult.length - 2;
44
42
  const isNextEmptyLine = next.value.length > 0 && current[next.value[0]].length === 0;
45
43
  const isPrevEmptyLine = change.value.length > 0 && previous[change.value[0]].length === 0;
46
44
  if (isFirstChange && isNextEmptyLine) {
47
45
  // special case: removing at the beginning
48
- removed.push(0);
46
+ changes.push({ previousRange: toLineRange(change), currentRange: LineRange.createEmptyLineRange(0) });
47
+ previousRevisionLine += change.count;
49
48
  }
50
49
  else if (isFirstChange && isPrevEmptyLine) {
51
50
  // special case: adding at the beginning
52
- const start = 0;
53
- const end = next.count - 1;
54
- added.push({ start, end });
55
- lastLine = end;
51
+ changes.push({ previousRange: LineRange.createEmptyLineRange(0), currentRange: toLineRange(next) });
52
+ currentRevisionLine += next.count;
56
53
  }
57
54
  else if (isLastChange && isNextEmptyLine) {
58
- removed.push(lastLine + 1 /* = empty line */);
55
+ changes.push({ previousRange: toLineRange(change), currentRange: LineRange.createEmptyLineRange(currentRevisionLine + 2) });
56
+ previousRevisionLine += change.count;
59
57
  }
60
58
  else {
61
59
  // default case is a modification
62
- const start = lastLine + 1;
63
- const end = lastLine + next.count;
64
- modified.push({ start, end });
65
- lastLine = end;
60
+ changes.push({ previousRange: toLineRange(change), currentRange: toLineRange(next) });
61
+ currentRevisionLine += next.count;
62
+ previousRevisionLine += change.count;
66
63
  }
67
64
  i++; // consume next eagerly
68
65
  }
69
66
  else if (change.removed && !(next && next.added)) {
70
- removed.push(Math.max(0, lastLine));
67
+ // case: removal
68
+ changes.push({ previousRange: toLineRange(change), currentRange: LineRange.createEmptyLineRange(currentRevisionLine + 1) });
69
+ previousRevisionLine += change.count;
71
70
  }
72
71
  else {
73
- lastLine += change.count;
72
+ // case: unchanged region
73
+ currentRevisionLine += change.count;
74
+ previousRevisionLine += change.count;
74
75
  }
75
76
  }
76
- return { added, removed, modified };
77
+ return { changes };
77
78
  }
78
79
  }
79
80
  exports.DiffComputer = DiffComputer;
@@ -100,4 +101,67 @@ function diffArrays(oldArr, newArr) {
100
101
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
101
102
  return arrayDiff.diff(oldArr, newArr);
102
103
  }
104
+ function toLineRange({ value }) {
105
+ const [start, end] = value;
106
+ return LineRange.create(start, end + 1);
107
+ }
108
+ var Change;
109
+ (function (Change) {
110
+ function isAddition(change) {
111
+ return LineRange.isEmpty(change.previousRange);
112
+ }
113
+ Change.isAddition = isAddition;
114
+ function isRemoval(change) {
115
+ return LineRange.isEmpty(change.currentRange);
116
+ }
117
+ Change.isRemoval = isRemoval;
118
+ function isModification(change) {
119
+ return !isAddition(change) && !isRemoval(change);
120
+ }
121
+ Change.isModification = isModification;
122
+ })(Change = exports.Change || (exports.Change = {}));
123
+ var LineRange;
124
+ (function (LineRange) {
125
+ function create(start, end) {
126
+ if (start < 0 || end < 0 || start > end) {
127
+ throw new Error(`Invalid line range: { start: ${start}, end: ${end} }`);
128
+ }
129
+ return { start, end };
130
+ }
131
+ LineRange.create = create;
132
+ function createSingleLineRange(line) {
133
+ return create(line, line + 1);
134
+ }
135
+ LineRange.createSingleLineRange = createSingleLineRange;
136
+ function createEmptyLineRange(line) {
137
+ return create(line, line);
138
+ }
139
+ LineRange.createEmptyLineRange = createEmptyLineRange;
140
+ function isEmpty(range) {
141
+ return range.start === range.end;
142
+ }
143
+ LineRange.isEmpty = isEmpty;
144
+ function getStartPosition(range) {
145
+ if (isEmpty(range)) {
146
+ return getEndPosition(range);
147
+ }
148
+ return vscode_languageserver_protocol_1.Position.create(range.start, 0);
149
+ }
150
+ LineRange.getStartPosition = getStartPosition;
151
+ function getEndPosition(range) {
152
+ if (range.end < 1) {
153
+ return vscode_languageserver_protocol_1.Position.create(0, 0);
154
+ }
155
+ return vscode_languageserver_protocol_1.Position.create(range.end - 1, vscode_languageserver_protocol_1.uinteger.MAX_VALUE);
156
+ }
157
+ LineRange.getEndPosition = getEndPosition;
158
+ function toRange(range) {
159
+ return vscode_languageserver_protocol_1.Range.create(getStartPosition(range), getEndPosition(range));
160
+ }
161
+ LineRange.toRange = toRange;
162
+ function getLineCount(range) {
163
+ return range.end - range.start;
164
+ }
165
+ LineRange.getLineCount = getLineCount;
166
+ })(LineRange = exports.LineRange || (exports.LineRange = {}));
103
167
  //# sourceMappingURL=diff-computer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diff-computer.js","sourceRoot":"","sources":["../../../src/browser/dirty-diff/diff-computer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff-computer.js","sourceRoot":"","sources":["../../../src/browser/dirty-diff/diff-computer.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAEhF,+BAA+B;AAE/B,sGAA8F;AAE9F,MAAa,YAAY;IAErB,WAAW,CAAC,QAA+B,EAAE,OAA8B;QACvE,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,gBAAgB,CAAC,QAA+B,EAAE,OAA8B;QAC5E,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvD,IAAI,mBAAmB,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,oBAAoB,GAAG,CAAC,CAAC,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/B,IAAI,MAAM,CAAC,KAAK,EAAE;gBACd,iBAAiB;gBACjB,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,SAAS,CAAC,oBAAoB,CAAC,oBAAoB,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7H,mBAAmB,IAAI,MAAM,CAAC,KAAM,CAAC;aACxC;iBAAM,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;gBAC7C,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC9B,MAAM,YAAY,GAAG,CAAC,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;gBACjD,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;gBACrF,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;gBAE1F,IAAI,aAAa,IAAI,eAAe,EAAE;oBAClC,0CAA0C;oBAC1C,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACtG,oBAAoB,IAAI,MAAM,CAAC,KAAM,CAAC;iBACzC;qBAAM,IAAI,aAAa,IAAI,eAAe,EAAE;oBACzC,wCAAwC;oBACxC,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACpG,mBAAmB,IAAI,IAAI,CAAC,KAAM,CAAC;iBACtC;qBAAM,IAAI,YAAY,IAAI,eAAe,EAAE;oBACxC,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,oBAAoB,CAAC,mBAAmB,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC5H,oBAAoB,IAAI,MAAM,CAAC,KAAM,CAAC;iBACzC;qBAAM;oBACH,iCAAiC;oBACjC,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACtF,mBAAmB,IAAI,IAAI,CAAC,KAAM,CAAC;oBACnC,oBAAoB,IAAI,MAAM,CAAC,KAAM,CAAC;iBACzC;gBACD,CAAC,EAAE,CAAC,CAAC,uBAAuB;aAC/B;iBAAM,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;gBAChD,gBAAgB;gBAChB,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,oBAAoB,CAAC,mBAAmB,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC5H,oBAAoB,IAAI,MAAM,CAAC,KAAM,CAAC;aACzC;iBAAM;gBACH,yBAAyB;gBACzB,mBAAmB,IAAI,MAAM,CAAC,KAAM,CAAC;gBACrC,oBAAoB,IAAI,MAAM,CAAC,KAAM,CAAC;aACzC;SACJ;QACD,OAAO,EAAE,OAAO,EAAE,CAAC;IACvB,CAAC;CAEJ;AAxDD,oCAwDC;AAED,MAAM,SAAU,SAAQ,MAAM,CAAC,IAAI;IAC/B,8DAA8D;IACrD,QAAQ,CAAC,KAAU;QACxB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,8DAA8D;IACrD,IAAI,CAAC,KAAU;QACpB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,8DAA8D;IACrD,WAAW,CAAC,KAAU;QAC3B,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AAED,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;AAElC;;GAEG;AACH,8DAA8D;AAC9D,SAAS,UAAU,CAAC,MAA6B,EAAE,MAA6B;IAC5E,8DAA8D;IAC9D,OAAO,SAAS,CAAC,IAAI,CAAC,MAAa,EAAE,MAAa,CAAQ,CAAC;AAC/D,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,KAAK,EAAc;IACtC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAC3B,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AAC5C,CAAC;AAkBD,IAAiB,MAAM,CAUtB;AAVD,WAAiB,MAAM;IACnB,SAAgB,UAAU,CAAC,MAAc;QACrC,OAAO,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC;IAFe,iBAAU,aAEzB,CAAA;IACD,SAAgB,SAAS,CAAC,MAAc;QACpC,OAAO,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC;IAFe,gBAAS,YAExB,CAAA;IACD,SAAgB,cAAc,CAAC,MAAc;QACzC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IAFe,qBAAc,iBAE7B,CAAA;AACL,CAAC,EAVgB,MAAM,GAAN,cAAM,KAAN,cAAM,QAUtB;AAOD,IAAiB,SAAS,CAkCzB;AAlCD,WAAiB,SAAS;IACtB,SAAgB,MAAM,CAAC,KAAa,EAAE,GAAW;QAC7C,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,UAAU,GAAG,IAAI,CAAC,CAAC;SAC3E;QACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAC1B,CAAC;IALe,gBAAM,SAKrB,CAAA;IACD,SAAgB,qBAAqB,CAAC,IAAY;QAC9C,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;IAClC,CAAC;IAFe,+BAAqB,wBAEpC,CAAA;IACD,SAAgB,oBAAoB,CAAC,IAAY;QAC7C,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAFe,8BAAoB,uBAEnC,CAAA;IACD,SAAgB,OAAO,CAAC,KAAgB;QACpC,OAAO,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC;IACrC,CAAC;IAFe,iBAAO,UAEtB,CAAA;IACD,SAAgB,gBAAgB,CAAC,KAAgB;QAC7C,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;YAChB,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;SAChC;QACD,OAAO,yCAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IALe,0BAAgB,mBAK/B,CAAA;IACD,SAAgB,cAAc,CAAC,KAAgB;QAC3C,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE;YACf,OAAO,yCAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAChC;QACD,OAAO,yCAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,yCAAQ,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;IALe,wBAAc,iBAK7B,CAAA;IACD,SAAgB,OAAO,CAAC,KAAgB;QACpC,OAAO,sCAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,CAAC;IAFe,iBAAO,UAEtB,CAAA;IACD,SAAgB,YAAY,CAAC,KAAgB;QACzC,OAAO,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;IACnC,CAAC;IAFe,sBAAY,eAE3B,CAAA;AACL,CAAC,EAlCgB,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAkCzB"}