Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion editors/vscode/.oxlintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,8 @@
"categories": {
"correctness": "error",
"perf": "error"
}
},
"ignorePatterns": [
"**/fixtures"
]
}
114 changes: 37 additions & 77 deletions editors/vscode/client/extension.spec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { deepStrictEqual, notEqual, strictEqual } from 'assert';
import { readFile } from 'fs/promises';
import {
CodeAction,
commands,
Expand All @@ -14,28 +13,20 @@ import {
import {
activateExtension,
createOxlintConfiguration,
deleteOxlintConfiguration,
getDiagnostics,
loadFixture,
sleep,
WORKSPACE_DIR,
} from './test-helpers';
import assert = require('assert');

const filePath = WORKSPACE_DIR + '/debugger.js';
const fileUri = Uri.parse(filePath);
const fileUri = Uri.joinPath(WORKSPACE_DIR, 'debugger.js');

suite('commands', () => {
setup(async () => {
await activateExtension();
});

suiteTeardown(async () => {
const edit = new WorkspaceEdit();
edit.deleteFile(fileUri, {
ignoreIfNotExists: true,
});
await workspace.applyEdit(edit);
});
setup(async () => {
await activateExtension();
});

suite('commands', () => {
test('listed commands', async () => {
const oxcCommands = (await commands.getCommands(true)).filter(x => x.startsWith('oxc.'));

Expand Down Expand Up @@ -76,6 +67,7 @@ suite('commands', () => {
const edit = new WorkspaceEdit();
edit.createFile(fileUri, {
contents: Buffer.from('/* 😊 */debugger;'),
overwrite: true,
});

await workspace.applyEdit(edit);
Expand All @@ -85,54 +77,18 @@ suite('commands', () => {
});
await workspace.saveAll();

const content = await readFile(fileUri.fsPath, {
encoding: 'utf8',
});
const content = await workspace.fs.readFile(fileUri);

strictEqual(content, '/* 😊 */');
strictEqual(content.toString(), '/* 😊 */');
});
});

suite('E2E Diagnostics', () => {
setup(async () => {
await activateExtension();
});

teardown(async () => {
const edit = new WorkspaceEdit();
edit.deleteFile(fileUri, {
ignoreIfNotExists: true,
});
await workspace.applyEdit(edit);
await deleteOxlintConfiguration();
});

test('simple debugger statement', async () => {
const edit = new WorkspaceEdit();
edit.createFile(fileUri, {
contents: Buffer.from('/* 😊 */debugger;'),
overwrite: true,
});

await workspace.applyEdit(edit);
await window.showTextDocument(fileUri);
const diagnostics = languages.getDiagnostics(fileUri);

strictEqual(diagnostics.length, 1);
assert(typeof diagnostics[0].code == 'object');
strictEqual(diagnostics[0].code.target.authority, 'oxc.rs');
strictEqual(diagnostics[0].message, '`debugger` statement is not allowed\nhelp: Remove the debugger statement');
strictEqual(diagnostics[0].severity, DiagnosticSeverity.Warning);
strictEqual(diagnostics[0].range.start.line, 0);
strictEqual(diagnostics[0].range.start.character, 8);
strictEqual(diagnostics[0].range.end.line, 0);
strictEqual(diagnostics[0].range.end.character, 17);
});

test('code actions', async () => {
suite('code actions', () => {
test('listed code actions', async () => {
const edit = new WorkspaceEdit();
edit.createFile(fileUri, {
contents: Buffer.from('debugger;'),
overwrite: true,
});

await workspace.applyEdit(edit);
Expand Down Expand Up @@ -172,19 +128,27 @@ suite('E2E Diagnostics', () => {
],
);
});
});

test('empty oxlint configuration behaves like default configuration', async () => {
await createOxlintConfiguration({});
suite('E2E Diagnostics', () => {
test('simple debugger statement', async () => {
await loadFixture('debugger');
const diagnostics = await getDiagnostics('debugger.js');

const edit = new WorkspaceEdit();
edit.createFile(fileUri, {
contents: Buffer.from('/* 😊 */debugger;'),
overwrite: true,
});
strictEqual(diagnostics.length, 1);
assert(typeof diagnostics[0].code == 'object');
strictEqual(diagnostics[0].code.target.authority, 'oxc.rs');
strictEqual(diagnostics[0].message, '`debugger` statement is not allowed\nhelp: Remove the debugger statement');
strictEqual(diagnostics[0].severity, DiagnosticSeverity.Warning);
strictEqual(diagnostics[0].range.start.line, 0);
strictEqual(diagnostics[0].range.start.character, 8);
strictEqual(diagnostics[0].range.end.line, 0);
strictEqual(diagnostics[0].range.end.character, 17);
});

await workspace.applyEdit(edit);
await window.showTextDocument(fileUri);
const diagnostics = languages.getDiagnostics(fileUri);
test('empty oxlint configuration behaves like default configuration', async () => {
await loadFixture('debugger_empty_config');
const diagnostics = await getDiagnostics('debugger.js');

strictEqual(diagnostics.length, 1);
assert(typeof diagnostics[0].code == 'object');
Expand All @@ -195,8 +159,6 @@ suite('E2E Diagnostics', () => {
strictEqual(diagnostics[0].range.start.character, 8);
strictEqual(diagnostics[0].range.end.line, 0);
strictEqual(diagnostics[0].range.end.character, 17);

await deleteOxlintConfiguration();
});

test('setting rule to error, will report the diagnostic as error', async () => {
Expand All @@ -208,6 +170,7 @@ suite('E2E Diagnostics', () => {

await workspace.applyEdit(edit);
await window.showTextDocument(fileUri);
await sleep(500);
const diagnosticsWarning = languages.getDiagnostics(fileUri);

strictEqual(diagnosticsWarning.length, 1);
Expand Down Expand Up @@ -258,11 +221,9 @@ suite('E2E Diagnostics', () => {
});
await workspace.saveAll();

const content = await readFile(fileUri.fsPath, {
encoding: 'utf8',
});
const content = await workspace.fs.readFile(fileUri);

strictEqual(content, originalContent);
strictEqual(content.toString(), originalContent);

await workspace.getConfiguration('oxc').update('flags', {
fix_kind: 'all',
Expand All @@ -274,11 +235,10 @@ suite('E2E Diagnostics', () => {
await commands.executeCommand('oxc.fixAll', {
uri: fileUri.toString(),
});
await sleep(500);
await workspace.saveAll();
const contentWithFixAll = await readFile(fileUri.fsPath, {
encoding: 'utf8',
});
const contentWithFixAll = await workspace.fs.readFile(fileUri);

strictEqual(contentWithFixAll, 'if (foo === null) { bar();}');
strictEqual(contentWithFixAll.toString(), 'if (foo === null) { bar();}');
});
});
23 changes: 15 additions & 8 deletions editors/vscode/client/test-helpers.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { extensions, Uri, workspace, WorkspaceEdit } from 'vscode';
import { commands, Diagnostic, extensions, languages, Uri, window, workspace, WorkspaceEdit } from 'vscode';
import path = require('path');

type OxlintConfigPlugins = string[];
type OxlintConfigCategories = Record<string, unknown>;
Expand Down Expand Up @@ -28,7 +29,7 @@ export type OxlintConfig = {
ignorePatterns?: OxlintConfigIgnorePatterns;
};

export const WORKSPACE_DIR = workspace.workspaceFolders![0].uri.toString();
export const WORKSPACE_DIR = workspace.workspaceFolders![0].uri;

const rootOxlintConfigPath = WORKSPACE_DIR + '/.oxlintrc.json';
const rootOxlintConfigUri = Uri.parse(rootOxlintConfigPath);
Expand All @@ -53,11 +54,17 @@ export async function createOxlintConfiguration(configuration: OxlintConfig): Pr
await workspace.applyEdit(edit);
}

export async function deleteOxlintConfiguration(): Promise<void> {
const edit = new WorkspaceEdit();
edit.deleteFile(rootOxlintConfigUri, {
ignoreIfNotExists: true,
});
await workspace.applyEdit(edit);
export async function loadFixture(fixture: string): Promise<void> {
const absolutePath = path.resolve(`${__dirname}/../fixtures/${fixture}`);
// do not copy directly into the workspace folder. FileWatcher will detect them as a deletion and stop itself.
await workspace.fs.copy(Uri.file(absolutePath), Uri.joinPath(WORKSPACE_DIR, 'diagnostic'), { overwrite: true });
}

export async function getDiagnostics(file: string): Promise<Diagnostic[]> {
const fileUri = Uri.joinPath(WORKSPACE_DIR, 'diagnostic', file);
await window.showTextDocument(fileUri);
await sleep(500);
const diagnostics = languages.getDiagnostics(fileUri);
await commands.executeCommand('workbench.action.closeActiveEditor');
return diagnostics;
}
1 change: 1 addition & 0 deletions editors/vscode/fixtures/debugger/debugger.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/* 😊 */debugger;
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/* 😊 */debugger;
Loading