Skip to content

Commit 9fe39b0

Browse files
refactor: optimize sort on save
1 parent ec6390b commit 9fe39b0

2 files changed

Lines changed: 15 additions & 21 deletions

File tree

src/extension.ts

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { registerCompletions } from './lib/completions';
22
import { registerCommands } from './lib/commands';
33
import { registerCodeFolding } from './lib/folding';
44
import { init } from './lib/core';
5-
import { commands, workspace } from 'vscode';
5+
import { workspace } from 'vscode';
66
import type { Core } from './interfaces';
77
import type { ExtensionContext } from 'vscode';
88

@@ -33,15 +33,6 @@ export async function activate(ctx: ExtensionContext) {
3333
registerCodeFolding(ctx);
3434
registerCommands(ctx, CORE);
3535

36-
// if runOnSave is enabled in settings, trigger command on file save
37-
if(workspace.getConfiguration().get('windicss.runOnSave')) {
38-
ctx.subscriptions.push(
39-
workspace.onDidSaveTextDocument((_e) => {
40-
commands.executeCommand('windicss.sort');
41-
})
42-
);
43-
}
44-
4536
console.log('Windi CSS Intellisense is now active!');
4637
}
4738

src/lib/commands.ts

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ import { HTMLParser } from '../utils/parser';
33
import { writeFileSync } from 'fs';
44
import { dirname, join } from 'path';
55
import { StyleSheet } from 'windicss/utils/style';
6+
import { workspace } from 'vscode';
67
import type { ExtensionContext } from 'vscode';
78
import type { Core } from '../interfaces';
8-
import { sortClassNames, toggleConfig } from '../utils';
9+
import { getConfig, sortClassNames, toggleConfig } from '../utils';
910

1011
export function registerCommands(ctx: ExtensionContext, core: Core): void {
1112
ctx.subscriptions.push(
@@ -49,25 +50,27 @@ export function registerCommands(ctx: ExtensionContext, core: Core): void {
4950
commands.registerTextEditorCommand('windicss.sort', (textEditor, textEdit) => {
5051
const text = textEditor.document.getText();
5152
const parser = new HTMLParser(text);
52-
const outputHTML: string[] = [];
53-
54-
let indexStart = 0;
5553

5654
const classes = parser.parseClasses();
5755
const variants = Object.keys(core.processor?.resolveVariants() ?? {});
5856
const variantsMap = Object.assign({}, ...variants.map((value, index) => ({ [value]: index + 1 })));
5957

6058
for (const p of classes) {
61-
outputHTML.push(text.substring(indexStart, p.start));
62-
outputHTML.push(sortClassNames(p.result, variantsMap));
63-
indexStart = p.end;
59+
const sortedP = sortClassNames(p.result, variantsMap);
60+
textEdit.replace(new Range(textEditor.document.positionAt(p.start), textEditor.document.positionAt(p.end)), sortedP);
6461
}
65-
outputHTML.push(text.substring(indexStart));
66-
67-
textEdit.replace(new Range(new Position(0, 0), textEditor.document.lineAt(textEditor.document.lineCount-1).range.end), outputHTML.join(''));
6862
})
6963
);
7064

65+
// if runOnSave is enabled in settings, trigger command on file save
66+
if(getConfig('windicss.runOnSave')) {
67+
ctx.subscriptions.push(
68+
workspace.onWillSaveTextDocument((_e) => {
69+
commands.executeCommand('windicss.sort');
70+
})
71+
);
72+
}
73+
7174
ctx.subscriptions.push(
7275
commands.registerCommand('windicss.toggle-folding', () => toggleConfig('windicss.enableCodeFolding'))
7376
);
@@ -99,4 +102,4 @@ export function registerCommands(ctx: ExtensionContext, core: Core): void {
99102
commands.executeCommand('workbench.action.reloadWindow');
100103
})
101104
);
102-
}
105+
}

0 commit comments

Comments
 (0)