Skip to content

Commit 3b9ec5f

Browse files
dangerously prevent change event from formatter
1 parent 290717c commit 3b9ec5f

2 files changed

Lines changed: 12 additions & 2 deletions

File tree

editor-packages/editor-services-prettier/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import * as monaco from "monaco-editor";
22
import { formatCode as formatDartCode } from "dart-style";
33
import { createWorkerQueue } from "@code-editor/webworker-services-core";
44

5+
export let __dangerous__lastFormattedValue__global: string;
6+
57
export function registerDocumentPrettier(editor, monaco) {
68
const disposables: monaco.IDisposable[] = [];
79
let prettierWorker;
@@ -11,6 +13,7 @@ export function registerDocumentPrettier(editor, monaco) {
1113
const raw = model.getValue();
1214
const { code, error } = formatDartCode(raw);
1315
if (error) return [];
16+
__dangerous__lastFormattedValue__global = code;
1417
return [
1518
{
1619
range: model.getFullModelRange(),
@@ -34,7 +37,7 @@ export function registerDocumentPrettier(editor, monaco) {
3437
});
3538

3639
if (canceled || error) return [];
37-
40+
__dangerous__lastFormattedValue__global = pretty;
3841
return [
3942
{
4043
range: model.getFullModelRange(),

editor/components/code-editor/monaco.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import Editor, {
88
import * as monaco from "monaco-editor/esm/vs/editor/editor.api";
99
import { MonacoEmptyMock } from "./monaco-mock-empty";
1010
import { register } from "./monaco-utils";
11+
import { __dangerous__lastFormattedValue__global } from "@code-editor/prettier-services";
1112

1213
type ICodeEditor = monaco.editor.IStandaloneCodeEditor;
1314

@@ -66,7 +67,13 @@ export function MonacoEditor(props: MonacoEditorProps) {
6667
loading={<MonacoEmptyMock l={5} />}
6768
defaultValue={props.defaultValue ?? "// no content"}
6869
theme="vs-dark"
69-
onChange={props.onChange}
70+
onChange={(...v) => {
71+
if (v[0] === __dangerous__lastFormattedValue__global) {
72+
// if change is caused by formatter, ignore.
73+
return;
74+
}
75+
props.onChange(...v);
76+
}}
7077
options={{
7178
...props.options,
7279
// overrided default options

0 commit comments

Comments
 (0)