Files
compiler-explorer/lib/compilers/micropython.ts
Matt Godbolt 53c7dd328b Configure Biome import organiser with grouped imports (#8431)
Enable Biome's `organizeImports` with groups matching the original
ESLint `import/order` configuration:

1. **Node builtins** (`node:fs`, `path`, etc.)
2. *(blank line)*
3. **Third-party packages** (`express`, `@sentry/node`, etc.)
4. *(blank line)*
5. **Local/relative imports** (`../foo.js`, `./bar.js`, aliases)

This resolves the inconsistency where Biome wasn't enforcing import
grouping, meaning new files would lose the blank-line separation that
the old ESLint config enforced.

### Impact
- **354 files** updated out of 738 checked (~48%)
- **+188 / -240 lines** (net -52) — almost entirely single blank line
additions/removals between import groups
- No import reordering; purely group separator consistency

Fixes #7373

🤖 Generated by LLM (Claude, via OpenClaw)
2026-02-01 20:50:46 -06:00

101 lines
3.5 KiB
TypeScript

import path from 'node:path';
import Semver from 'semver';
import {splitArguments} from '../../shared/common-utils.js';
import type {
ActiveTool,
BypassCache,
ExecutionParams,
FiledataPair,
} from '../../types/compilation/compilation.interfaces.js';
import type {ConfiguredOverrides} from '../../types/compilation/compiler-overrides.interfaces.js';
import type {BasicExecutionResult, ExecutableExecutionOptions} from '../../types/execution/execution.interfaces.js';
import type {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js';
import type {SelectedLibraryVersion} from '../../types/libraries/libraries.interfaces.js';
import {BaseCompiler} from '../base-compiler.js';
import type {IExecutionEnvironment} from '../execution/execution-env.interfaces.js';
export class MicroPythonCompiler extends BaseCompiler {
static get key() {
return 'micropython';
}
override getOutputFilename(dirPath: string) {
return path.join(dirPath, `${path.basename(this.compileFilename, this.lang.extensions[0])}.mpy`);
}
override prepareArguments(
userOptions: string[],
filters: ParseFiltersAndOutputOptions,
backendOptions: Record<string, any>,
inputFilename: string,
outputFilename: string,
libraries: SelectedLibraryVersion[],
overrides: ConfiguredOverrides,
) {
if (Semver.eq(this.compiler.semver, '1.20.0')) {
return [
...['-o', outputFilename],
...(filters.dontMaskFilenames ? [] : ['-s', this.compileFilename]),
...(this.compiler.options ? splitArguments(this.compiler.options) : []),
...userOptions,
...[inputFilename],
];
} else {
return [
...['-o', outputFilename],
...(filters.dontMaskFilenames ? [] : ['-s', this.compileFilename]),
...(this.compiler.options ? splitArguments(this.compiler.options) : []),
...userOptions,
...['--', inputFilename],
];
}
}
override async compile(
source: string,
options: string[],
backendOptions: Record<string, any>,
filters: ParseFiltersAndOutputOptions,
bypassCache: BypassCache,
tools: ActiveTool[],
executeParameters: ExecutionParams,
libraries: SelectedLibraryVersion[],
files: FiledataPair[],
) {
filters.binary = true;
return super.compile(
source,
options,
backendOptions,
filters,
bypassCache,
tools,
executeParameters,
libraries,
files,
);
}
override async runExecutable(
executable: string,
executeParameters: ExecutableExecutionOptions,
homeDir: string,
): Promise<BasicExecutionResult> {
const execOptionsCopy: ExecutableExecutionOptions = JSON.parse(
JSON.stringify(executeParameters),
) as ExecutableExecutionOptions;
execOptionsCopy.args = [
...this.compiler.executionWrapperArgs,
...['-m', path.basename(executable, '.mpy')],
...execOptionsCopy.args,
];
executable = this.compiler.executionWrapper;
const execEnv: IExecutionEnvironment = new this.executionEnvironmentClass(this.env);
return execEnv.execBinary(executable, execOptionsCopy, homeDir);
}
}