mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-11 14:08:55 +08:00
chore: migrate oxlint & oxfmt (#15464)
#### PR Dependency Tree * **PR #15464** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Replaced the project’s formatting and linting workflow with Oxfmt and Oxlint. * Added shared formatting and linting configuration, editor integration, and updated automated checks. * Updated generated files, scripts, and lint guidance to use the new tooling. * **Style** * Reformatted templates, source code, examples, and configuration files for consistent readability. * No user-facing functionality or rendering behavior changed. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -32,10 +32,10 @@
|
||||
"jsonc-parser": "^3.3.1",
|
||||
"lodash-es": "^4.17.23",
|
||||
"mime-types": "^3.0.0",
|
||||
"oxfmt": "0.63.0",
|
||||
"postcss": "^8.5.18",
|
||||
"postcss-loader": "^8.2.1",
|
||||
"postcss-selector-parser": "^7.1.0",
|
||||
"prettier": "^3.7.4",
|
||||
"source-map-loader": "^5.0.0",
|
||||
"style-loader": "^4.0.0",
|
||||
"swc-loader": "^0.2.6",
|
||||
|
||||
+17
-20
@@ -7,7 +7,7 @@ import {
|
||||
yarnList,
|
||||
} from '@affine-tools/utils/workspace';
|
||||
import { applyEdits, modify } from 'jsonc-parser';
|
||||
import { type BuiltInParserName, format } from 'prettier';
|
||||
import { format, type FormatConfig } from 'oxfmt';
|
||||
|
||||
import { Command } from './command';
|
||||
|
||||
@@ -22,20 +22,15 @@ export class InitCommand extends Command {
|
||||
|
||||
async generateWorkspaceFiles() {
|
||||
this.workspace = new Workspace(yarnList());
|
||||
const filesToGenerate: [
|
||||
Path,
|
||||
(prev: string) => string,
|
||||
BuiltInParserName?,
|
||||
][] = [
|
||||
[this.workspace.join('tsconfig.json'), this.genProjectTsConfig, 'json'],
|
||||
const filesToGenerate: [Path, (prev: string) => string][] = [
|
||||
[this.workspace.join('tsconfig.json'), this.genProjectTsConfig],
|
||||
[
|
||||
this.workspace
|
||||
.getPackage('@affine-tools/utils')
|
||||
.join('src/workspace.gen.ts'),
|
||||
this.genWorkspaceInfo,
|
||||
'typescript',
|
||||
],
|
||||
[this.workspace.join('.oxlintrc.json'), this.genOxlintConfig, 'json'],
|
||||
[this.workspace.join('.oxlintrc.json'), this.genOxlintConfig],
|
||||
...this.workspace.packages
|
||||
.filter(p => p.isTsProject)
|
||||
.map(
|
||||
@@ -43,27 +38,29 @@ export class InitCommand extends Command {
|
||||
[
|
||||
p.join('tsconfig.json'),
|
||||
this.genPackageTsConfig.bind(this, p),
|
||||
'json',
|
||||
] as any
|
||||
] satisfies [Path, (prev: string) => string]
|
||||
),
|
||||
];
|
||||
|
||||
for (const [path, content, formatter] of filesToGenerate) {
|
||||
for (const [path, content] of filesToGenerate) {
|
||||
this.logger.info(`Generating: ${path}`);
|
||||
const previous = readFileSync(path.value, 'utf-8');
|
||||
let file = content(previous);
|
||||
if (formatter) {
|
||||
file = await this.format(file, formatter);
|
||||
}
|
||||
const file = await this.format(content(previous), path.value);
|
||||
writeFileSync(path.value, file);
|
||||
}
|
||||
}
|
||||
|
||||
format(content: string, parser: BuiltInParserName) {
|
||||
async format(content: string, fileName: string) {
|
||||
const config = JSON.parse(
|
||||
readFileSync(this.workspace.join('.prettierrc').value, 'utf-8')
|
||||
);
|
||||
return format(content, { parser, ...config });
|
||||
readFileSync(this.workspace.join('.oxfmtrc.json').value, 'utf-8')
|
||||
) as FormatConfig;
|
||||
const result = await format(fileName, content, config);
|
||||
if (result.errors.length) {
|
||||
throw new Error(
|
||||
result.errors.map(error => error.codeframe ?? error.message).join('\n')
|
||||
);
|
||||
}
|
||||
return result.code;
|
||||
}
|
||||
|
||||
genOxlintConfig = () => {
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
'MutationObserver',
|
||||
];
|
||||
|
||||
// oxlint-disable-next-line @typescript-eslint/prefer-for-of
|
||||
// oxlint-disable-next-line typescript/prefer-for-of
|
||||
for (let i = 0; i < globals.length; i++) {
|
||||
if (!(globals[i] in globalThis)) {
|
||||
showGlobalErrorPage();
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"@types/node": "^22.0.0",
|
||||
"chalk": "^5.3.0",
|
||||
"lodash-es": "^4.17.23",
|
||||
"prettier": "^3.7.4",
|
||||
"oxfmt": "0.63.0",
|
||||
"typescript": "^5.9.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,17 +1,22 @@
|
||||
import { readFileSync } from 'node:fs';
|
||||
|
||||
import { once } from 'lodash-es';
|
||||
import { type BuiltInParserName, format } from 'prettier';
|
||||
import { format, type FormatConfig } from 'oxfmt';
|
||||
|
||||
import { ProjectRoot } from './path';
|
||||
|
||||
const readConfig = once(() => {
|
||||
const path = ProjectRoot.join('.prettierrc').value;
|
||||
const config = JSON.parse(readFileSync(path, 'utf-8'));
|
||||
const path = ProjectRoot.join('.oxfmtrc.json').value;
|
||||
const config = JSON.parse(readFileSync(path, 'utf-8')) as FormatConfig;
|
||||
return config;
|
||||
});
|
||||
|
||||
export function prettier(content: string, parser: BuiltInParserName) {
|
||||
const config = readConfig();
|
||||
return format(content, { parser, ...config });
|
||||
export async function formatCode(content: string, fileName: string) {
|
||||
const result = await format(fileName, content, readConfig());
|
||||
if (result.errors.length) {
|
||||
throw new Error(
|
||||
result.errors.map(error => error.codeframe ?? error.message).join('\n')
|
||||
);
|
||||
}
|
||||
return result.code;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user