8a93327c674842a77a235d3c2f8f88cde63172e3ab9025844e1ec24eb39b93c120e62eabc45b2881503a50aef8e3f9b6d69706d5e21077c7ab04ce478260e1 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. import { Range } from '../../../common/core/range.js';
  6. export function createDisposableRef(object, disposable) {
  7. return {
  8. object,
  9. dispose: () => disposable === null || disposable === void 0 ? void 0 : disposable.dispose(),
  10. };
  11. }
  12. export function applyEdits(text, edits) {
  13. const transformer = new PositionOffsetTransformer(text);
  14. const offsetEdits = edits.map(e => {
  15. const range = Range.lift(e.range);
  16. return ({
  17. startOffset: transformer.getOffset(range.getStartPosition()),
  18. endOffset: transformer.getOffset(range.getEndPosition()),
  19. text: e.text
  20. });
  21. });
  22. offsetEdits.sort((a, b) => b.startOffset - a.startOffset);
  23. for (const edit of offsetEdits) {
  24. text = text.substring(0, edit.startOffset) + edit.text + text.substring(edit.endOffset);
  25. }
  26. return text;
  27. }
  28. class PositionOffsetTransformer {
  29. constructor(text) {
  30. this.lineStartOffsetByLineIdx = [];
  31. this.lineStartOffsetByLineIdx.push(0);
  32. for (let i = 0; i < text.length; i++) {
  33. if (text.charAt(i) === '\n') {
  34. this.lineStartOffsetByLineIdx.push(i + 1);
  35. }
  36. }
  37. }
  38. getOffset(position) {
  39. return this.lineStartOffsetByLineIdx[position.lineNumber - 1] + position.column - 1;
  40. }
  41. }
  42. const array = [];
  43. export function getReadonlyEmptyArray() {
  44. return array;
  45. }