Repository Analysis

oxc-project/oxc

⚓ A collection of high-performance JavaScript tools.

4.7 Likely human-written View on GitHub
4.7
Adjusted Score
4.7
Raw Score
100%
Time Factor
2026-05-30
Last Push
21,349
Stars
Rust
Language
849,199
Lines of Code
2990
Files
3900
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 10HIGH 5MEDIUM 30LOW 3855

Pattern Findings

3900 matches across 11 categories. Click a row to expand file-level details.

Over-Commented Block3734 hits · 3608 pts
SeverityFileLineSnippet
LOWdeny.toml1# This template contains all of the possible sections and their default values
LOWdeny.toml21yanked = "warn"
LOWdeny.toml61 "CDLA-Permissive-2.0",
LOWdeny.toml81# The name of the crate the clarification applies to
LOWdeny.toml101# visit https://doc.rust-lang.org/cargo/reference/manifest.html#the-publish-field.
LOWdeny.toml121# * lowest-version - The path to the lowest versioned duplicate is highlighted
LOWdeny.toml141 # not specified, all versions will be matched.
LOWdeny.toml161# "hyper-rustls",
LOWdeny.toml181skip-tree = [
LOWdeny.toml201
LOWdeny.toml221 # The triple can be any string, but only the target triples built in to
LOWdeny.toml241# If true, metadata will be collected with `--no-default-features`. The same
LOW.rustfmt.toml1style_edition = "2024"
LOWtasks/benchmark/benches/lexer.rs81 while lexer.next_token_for_benchmarks().kind() != Kind::Eof {}
LOWtasks/benchmark/src/lib.rs1use std::alloc::{GlobalAlloc, Layout, System};
LOWtasks/transform_checker/src/lib.rs1//! Utility to check correctness of `ScopeTree` and `SymbolTable` after transformer has run.
LOWtasks/transform_checker/src/lib.rs21//!
LOWtasks/transform_checker/src/lib.rs41//! The scope IDs are:
LOWtasks/transform_checker/src/lib.rs61//! function f() { /* Scope ID 2 */ }
LOWtasks/transform_conformance/src/constants.rs21 // [Syntax] "babel-plugin-transform-syntax-bigint",
LOWtasks/transform_conformance/src/constants.rs41 // "babel-plugin-transform-sticky-regex",
LOWtasks/prettier_conformance/src/lib.rs121
LOWtasks/prettier_conformance/src/lib.rs321 /// ===optionsB===
LOWtasks/ast_tools/src/main.rs1//! Generator of code related to AST.
LOWtasks/ast_tools/src/main.rs21//! # When code generation happens, and where it goes
LOWtasks/ast_tools/src/main.rs41//! All `.rs` source files in crates which depend on `oxc_ast_macros` crate are read and parsed with [`syn`].
LOWtasks/ast_tools/src/main.rs61//! * [`StructDef`] contains info about the name and type of every field in the struct.
LOWtasks/ast_tools/src/main.rs81//! The end result of this phase is the [`Schema`], which is the single source of truth about the AST.
LOWtasks/ast_tools/src/main.rs101//!
LOWtasks/ast_tools/src/main.rs121//!
LOWtasks/ast_tools/src/main.rs141//!
LOWtasks/ast_tools/src/main.rs161//! custom attributes, and are much simpler than `syn`'s types.
LOWtasks/ast_tools/src/parse/attr.rs141#[derive(Debug)]
LOWtasks/ast_tools/src/parse/mod.rs1//! Create schema of types from Rust source files.
LOWtasks/ast_tools/src/parse/mod.rs21//! by [`TypeId`] - same order of entries as the `FxIndexSet` of type names from phase 1.
LOWtasks/ast_tools/src/parse/mod.rs121/// (when the `proc-macro` feature is enabled on `proc-macro2`).
LOWtasks/ast_tools/src/parse/parse.rs41
LOWtasks/ast_tools/src/output/rust.rs61/// Original comment can be either `///@` or `//!@`.
LOWtasks/ast_tools/src/output/javascript.rs81/// `const` statements will be inserted at the top of the file for the flags listed in `FLAG_NAMES`.
LOWtasks/ast_tools/src/output/javascript.rs101///
LOWtasks/ast_tools/src/output/javascript.rs121///
LOWtasks/ast_tools/src/output/javascript.rs141/// impl VariantGenerator<2> for Gen {
LOWtasks/ast_tools/src/output/yaml.rs21 /// * Glob patterns for watched crates (`{crate}/src/**/*.rs`)
LOWtasks/ast_tools/src/schema/mod.rs121 /// Get reference to [`StructDef`] for a [`TypeId`].
LOWtasks/ast_tools/src/schema/mod.rs161 /// Get mutable reference to [`PrimitiveDef`] for a [`TypeId`].
LOWtasks/ast_tools/src/schema/mod.rs201 /// Get reference to [`VecDef`] for a [`TypeId`].
LOWtasks/ast_tools/src/schema/extensions/estree.rs1/// Configuration for ESTree generator on a struct.
LOWtasks/ast_tools/src/schema/extensions/estree.rs21 /// * Actual struct field: index of the field.
LOWtasks/ast_tools/src/schema/extensions/estree.rs41 /// Name of custom converter `#[ast_meta]` type to use to serialize this enum.
LOWtasks/ast_tools/src/schema/extensions/estree.rs61
LOWtasks/ast_tools/src/schema/extensions/estree.rs81 pub no_flatten: bool,
LOWtasks/ast_tools/src/schema/defs/mod.rs101 ///
LOWtasks/ast_tools/src/schema/defs/mod.rs141 result
LOWtasks/ast_tools/src/derives/dummy.rs141 alloc.count += field_alloc.count;
LOWtasks/ast_tools/src/derives/mod.rs61 ///
LOWtasks/ast_tools/src/derives/mod.rs81 /// }
LOWtasks/ast_tools/src/derives/mod.rs101 /// #[ast(visit)]
LOWtasks/ast_tools/src/derives/estree.rs381 let stmts = g.stmts;
LOWtasks/ast_tools/src/generators/scopes_collector.rs41///
LOWtasks/ast_tools/src/generators/scopes_collector.rs81 if state == CalculationState::NotCalculated {
3674 more matches not shown…
Hallucination Indicators10 hits · 115 pts
SeverityFileLineSnippet
CRITICALcrates/oxc_linter/src/config/config_store.rs364 self.base.base.config.options.type_aware.unwrap_or(false)
CRITICALcrates/oxc_linter/src/config/config_store.rs369 self.base.base.config.options.type_check.unwrap_or(false)
CRITICALcrates/oxc_linter/src/config/config_store.rs374 self.base.base.config.options.deny_warnings.unwrap_or(false)
CRITICALcrates/oxc_linter/src/config/config_store.rs389 self.base.base.config.options.respect_eslint_disable_directives.unwrap_or(true)
CRITICALcrates/oxc_linter/src/config/config_store.rs849 assert!(!store.base.base.config.env.contains("React"));
CRITICALcrates/oxc_linter/src/config/config_store.rs873 assert!(store.base.base.config.env.contains("es2024"));
CRITICALcrates/oxc_linter/src/config/config_store.rs897 assert!(!store.base.base.config.globals.is_enabled("React"));
CRITICALcrates/oxc_linter/src/config/config_store.rs898 assert!(!store.base.base.config.globals.is_enabled("Secret"));
CRITICALcrates/oxc_linter/src/config/config_store.rs974 assert!(store.base.base.config.globals.is_enabled("React"));
CRITICALcrates/oxc_linter/src/config/config_store.rs975 assert!(store.base.base.config.globals.is_enabled("Secret"));
Hyper-Verbose Identifiers87 hits · 92 pts
SeverityFileLineSnippet
LOWtasks/ast_tools/src/generators/estree_visit.rs207 function debugCheckAncestorsOnExit(lenBefore, node) {
LOWtasks/compat_data/chromium-to-electron.js16function addElectronSupportFromChromium(supportData) {
LOW…xc_linter/src/rules/typescript/no_invalid_void_type.rs574 function returnsVoidPromiseDirectly(): Promise<void> {
LOWcrates/oxc_linter/src/rules/eslint/no_magic_numbers.rs748 ("function getNegativeSecondsInMinute() {return -60;}", None),
LOW…s/oxc_linter/src/rules/eslint/no_unused_expressions.rs423 function namedFunctionInExpressionContext() {
LOW…inter/src/rules/react/no_unstable_nested_components.rs1206 function UnstableNestedFunctionComponent() {
LOW…inter/src/rules/react/no_unstable_nested_components.rs1222 function UnstableNestedFunctionComponent() {
LOW…inter/src/rules/react/no_unstable_nested_components.rs1270 function UnstableNestedFunctionComponent() {
LOW…inter/src/rules/react/no_unstable_nested_components.rs1286 function UnstableNestedFunctionComponent() {
LOW…inter/src/rules/react/no_unstable_nested_components.rs1302 function UnstableNestedFunctionComponent() {
LOW…inter/src/rules/react/no_unstable_nested_components.rs1318 function UnstableNestedFunctionComponent() {
LOW…inter/src/rules/react/no_unstable_nested_components.rs1443 function UnstableNestedFunctionComponent() {
LOW…inter/src/rules/react/no_unstable_nested_components.rs1461 function UnstableNestedClassComponent() {
LOW…inter/src/rules/react/no_unstable_nested_components.rs1515 function NestedUnstableFunctionComponent() {
LOW…inter/src/rules/react/no_unstable_nested_components.rs1535 function NestedUnstableFunctionComponent() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs820 function ComponentWithNormalFunction() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs826 function normalFunctionWithNormalFunction() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs832 function normalFunctionWithConditionalFunction() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs840 function functionThatStartsWithUseButIsntAHook() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs1530 function ComponentWithHookInsideLoop() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs1537 function ComponentWithHookInsideLoop() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs1546 function ComponentWithHookInsideLoop() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs728 function ComponentWithConditionalHook() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs1315 function ComponentWithConditionalHook() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs1412 function ComponentWithConditionalHook() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs1423 return function ComponentWithConditionalHook() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs1434 function useHookWithConditionalHook() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs1445 return function useHookWithConditionalHook() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs1464 function ComponentWithHookInsideCallback() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs1475 return function ComponentWithHookInsideCallback() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs1508 function ComponentWithHookInsideCallback() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs1519 return function ComponentWithHookInsideCallback() {
LOWcrates/oxc_linter/src/rules/react/rules_of_hooks.rs1596 function normalFunctionWithConditionalHook() {
LOW.github/scripts/generate-benchmark-matrix.js127async function determineAffectedComponents() {
LOWapps/oxfmt/test/lsp/utils.ts228export async function formatFixtureAfterConfigChange(
LOWapps/oxlint/test/lsp/utils.ts212export async function lintMultiWorkspaceFixture(
LOWapps/oxlint/test/lsp/utils.ts250export async function lintFixtureWithFileContentChange(
LOWapps/oxlint/test/lsp/utils.ts267export async function lintMultiWorkspaceFixtureWithFileContentChange(
LOWapps/oxlint/src-js/plugins/comments.ts311function deserializeCommentIfNeeded(index: number): Comment | null {
LOWapps/oxlint/src-js/plugins/comments.ts370function debugCheckDeserializedComments(): void {
LOWapps/oxlint/src-js/plugins/comments.ts451function debugAssertAllCommentsCleared(): void {
LOWapps/oxlint/src-js/plugins/report.ts285function resolveMessageFromMessageId(messageId: string, ruleDetails: RuleDetails): string {
LOWapps/oxlint/src-js/plugins/fix.ts227function validateAndConvertFix(fix: Fix): FixReport {
LOWapps/oxlint/src-js/plugins/location.ts116export function debugAssertLinesIsInitialized(): void {
LOWapps/oxlint/src-js/plugins/tokens.ts506function debugCheckDeserializedTokens(): void {
LOWapps/oxlint/src-js/plugins/tokens.ts600function debugAssertAllTokensCleared(): void {
LOWapps/oxlint/src-js/plugins/selector.ts360export function wrapVisitFnWithSelectorMatch(
LOWapps/oxlint/src-js/plugins/tokens_and_comments.ts112export function initTokensAndCommentsBuffer(): void {
LOWapps/oxlint/src-js/plugins/cfg.ts290export function debugAssertIsEnterExitObject(enterExit: unknown): asserts enterExit is EnterExit {
LOWapps/oxlint/src-js/package/rule_tester.ts584function assertValidTestCasePasses(test: ValidTestCase, plugin: Plugin, config: Config): void {
LOWapps/oxlint/src-js/package/rule_tester.ts622function assertInvalidTestCasePasses(test: InvalidTestCase, plugin: Plugin, config: Config): void {
LOWapps/oxlint/src-js/package/rule_tester.ts739function assertInvalidTestCaseMessageIsCorrect(
LOWapps/oxlint/src-js/package/rule_tester.ts846function assertInvalidTestCaseLocationIsCorrect(
LOWapps/oxlint/src-js/package/rule_tester.ts920function assertSuggestionsAreCorrect(
LOWapps/oxlint/src-js/package/rule_tester.ts972function assertSuggestionMessageIsCorrect(
LOWapps/oxlint/src-js/package/rule_tester.ts1020function assertErrorCountIsCorrect(diagnostics: Diagnostic[], expectedErrorCount: number): void {
LOWapps/oxlint/src-js/package/rule_tester.ts1059function getUnsubstitutedMessagePlaceholders(
LOWapps/oxlint/src-js/package/rule_tester.ts1509function setEcmaVersionAndFeatures(test: TestCase) {
LOWapps/oxlint/src-js/package/rule_tester.ts1609function assertValidTestCaseIsWellFormed(test: ValidTestCase, seenTestCases: Set<string>): void {
LOWapps/oxlint/src-js/package/rule_tester.ts1635function assertInvalidTestCaseIsWellFormed(
27 more matches not shown…
Decorative Section Separators18 hits · 54 pts
SeverityFileLineSnippet
MEDIUMcrates/oxc_language_server/src/tests.rs1776 // ── Single-file mode (no workspace folders / root URI on initialize) ──────
MEDIUMcrates/oxc_language_server/src/worker_manager.rs98 // ── Starting / Stopping ───────────────────────────────────────────────────────
MEDIUMcrates/oxc_language_server/src/worker_manager.rs154 // ── State accessors ───────────────────────────────────────────────────────
MEDIUMcrates/oxc_language_server/src/worker_manager.rs187 // ── Worker creation ───────────────────────────────────────────────────────
MEDIUMcrates/oxc_language_server/src/worker_manager.rs200 // ── Lookup helpers (associated functions) ─────────────────────────────────
MEDIUMcrates/oxc_language_server/src/worker_manager.rs298 // ── Workspace-folder change handling ──────────────────────────────────────
MEDIUMcrates/oxc_language_server/src/worker_manager.rs344 // ── Single-file mode operations ───────────────────────────────────────────
MEDIUMcrates/oxc_linter/examples/linter.rs88// · ─────────
MEDIUMcrates/oxc_linter/src/disable_directives.rs825 /// ────┬────────────────────────────────────────────
MEDIUMcrates/oxc_jsdoc/src/parser/jsdoc_parts.rs61 // ───────
MEDIUM…formatter/src/formatter/jsdoc/mdast_serialize/nodes.rs280// ──────────────────────────────────────────────────
MEDIUM…formatter/src/formatter/jsdoc/mdast_serialize/nodes.rs282// ──────────────────────────────────────────────────
MEDIUM…formatter/src/formatter/jsdoc/mdast_serialize/nodes.rs545// ──────────────────────────────────────────────────
MEDIUM…formatter/src/formatter/jsdoc/mdast_serialize/nodes.rs547// ──────────────────────────────────────────────────
MEDIUM…formatter/src/formatter/jsdoc/mdast_serialize/nodes.rs683// ──────────────────────────────────────────────────
MEDIUM…formatter/src/formatter/jsdoc/mdast_serialize/nodes.rs685// ──────────────────────────────────────────────────
MEDIUM…formatter/src/formatter/jsdoc/mdast_serialize/nodes.rs782// ──────────────────────────────────────────────────
MEDIUM…formatter/src/formatter/jsdoc/mdast_serialize/nodes.rs784// ──────────────────────────────────────────────────
AI Slop Vocabulary13 hits · 36 pts
SeverityFileLineSnippet
MEDIUMtasks/ast_tools/src/main.rs77//! Custom attributes on types (e.g. `#[visit]`) are also parsed at this stage, in conjunction with
MEDIUMtasks/ast_tools/src/main.rs403/// to include all attrs which generators/derives utilize.
MEDIUMcrates/oxc_parser/src/lexer/source.rs787// Implement `Ord` and `PartialOrd` using `(*const u8)::offset_from` to utilize the invariant
MEDIUM…rmer/src/es2018/async_generator_functions/for_await.rs57 // but we don't have a such method to do it, so we leverage the statement injector.
MEDIUM…tes/oxc_linter/src/rules/vitest/prefer_to_be_truthy.rs82 /// truthy value, which makes the tests more comprehensive and robust.
MEDIUM…oxc_linter/src/rules/typescript/no_inferrable_types.rs97 // Essentially a readonly property without a type
MEDIUM…_linter/src/rules/eslint/prefer_named_capture_group.rs44 /// and allow references by name (e.g. `match.groups.year`), which is more robust.
MEDIUM…/oxc_linter/src/rules/eslint/class_methods_use_this.rs86 /// Enforce that class methods utilize `this`.
MEDIUMcrates/oxc_data_structures/src/code_buffer.rs24/// Essentially same as `String` but with additional methods.
LOWcrates/oxc_data_structures/src/non_null.rs8//! # Why not just use `*const T` / `*mut T`?
LOWcrates/oxc_data_structures/src/non_null.rs15//! # Why not just use `NonNull<T>`?
MEDIUMcrates/oxc_ecmascript/src/constant_evaluation/mod.rs40 /// passing `Some(ValueType::Boolean)` will allow us to utilize that information.
MEDIUMcrates/oxc_formatter_core/Cargo.toml35# header points to the consumer, not the shared harness.
Synthetic Comment Markers5 hits · 30 pts
SeverityFileLineSnippet
HIGHtasks/linter_codegen/src/main.rs56 out.push_str("// Auto-generated code, DO NOT EDIT DIRECTLY!\n");
HIGHtasks/linter_codegen/src/rules_enum.rs47 "// Auto-generated code, DO NOT EDIT DIRECTLY!\n// To regenerate: `cargo lintgen`\n\n";
HIGHtasks/ast_tools/src/output/mod.rs25 "{comment_start} Auto-generated code, DO NOT EDIT DIRECTLY!\n\
HIGH…/oxc_minifier/src/traverse_context/scopes_collector.rs1// Auto-generated code, DO NOT EDIT DIRECTLY!
HIGHnpm/oxc-types/types.d.ts1// Auto-generated code, DO NOT EDIT DIRECTLY!
Verbosity Indicators15 hits · 25 pts
SeverityFileLineSnippet
LOWcrates/oxc_transformer/src/es2020/optional_chaining.rs489 // so we need to check if we need to specify the context.
LOWcrates/oxc_transformer/src/typescript/annotations.rs114 // it is not a type import, otherwise we need to check if the identifier is referenced
LOWcrates/oxc_linter/src/rules/eslint/prefer_template.rs276 // Step 1: Escape ${ and ` that aren't already properly escaped
LOWcrates/oxc_linter/src/rules/eslint/prefer_template.rs278 // Step 2: Unescape the quote character (\' → ' or \" → ")
LOWcrates/oxc_linter/src/rules/eslint/no_loop_func.rs263 // as a write reference. We need to check if the function is nested inside such a loop.
LOW…es/oxc_linter/src/rules/eslint/no_unused_vars/usage.rs560 // todo: do we need to check if variable is used as iterator in
LOWcrates/oxc_minifier/src/peephole/remove_dead_code.rs229 // We need to check if it is in arrow function with `expression: true`.
LOWcrates/oxc_allocator/src/arena/fixed_size/windows.rs760 // Step 1: A large allocation that pushes committed region just past `CONTAINER_SIZE / 2`.
LOWcrates/oxc_allocator/src/arena/fixed_size/windows.rs774 // Step 2: A small allocation that triggers a further grow.
LOW…ates/oxc_formatter/src/print/binary_like_expression.rs558 // We can flatten the left hand side, so we need to check if we have a nested binary expression
LOW…r_plugins/tests/integrations/replace_global_defines.rs374 // Step 1: Run define plugin first (like the playground does)
LOW…r_plugins/tests/integrations/replace_global_defines.rs379 // Step 2: Rebuild semantic for transformer
LOW…r_plugins/tests/integrations/replace_global_defines.rs383 // Step 3: Run transformer with ES2019 target (lowers optional chaining)
LOW…oxc_transformer_plugins/src/inject_global_variables.rs165 // Step 1: slow path where visiting the AST is required to replace dot defines.
LOW…oxc_transformer_plugins/src/inject_global_variables.rs179 // Step 2: find all the injects that are referenced.
Fake / Example Data12 hits · 14 pts
SeverityFileLineSnippet
LOW…s/oxc_linter/src/rules/eslint/preserve_caught_error.rs558 throw new AggregateError([], "Lorem ipsum");
LOW…s/oxc_linter/src/rules/eslint/preserve_caught_error.rs941 throw new AggregateError([], "Lorem ipsum");
LOW…s/oxc_linter/src/rules/eslint/preserve_caught_error.rs948 throw new AggregateError([], "Lorem ipsum", { cause: err });
LOWcrates/oxc_linter/src/rules/eslint/no_alert.rs37 /// prompt("What's your name?", "John Doe");
LOW…s/oxc_linter/src/rules/eslint/prefer_arrow_callback.rs498 ) /* Lorem ipsum
LOW…s/oxc_linter/src/rules/eslint/prefer_arrow_callback.rs499 dolor sit amet. */ {
LOW…s/oxc_linter/src/rules/eslint/prefer_arrow_callback.rs630 ) /* Lorem ipsum
LOW…s/oxc_linter/src/rules/eslint/prefer_arrow_callback.rs631 dolor sit amet. */ {
LOW…s/oxc_linter/src/rules/eslint/prefer_arrow_callback.rs640 ) => /* Lorem ipsum
LOW…s/oxc_linter/src/rules/eslint/prefer_arrow_callback.rs641 dolor sit amet. */ {
LOWapps/oxfmt/test/api/js_in_xxx.test.ts43Lorem ipsum dolor sit amet, consectetur adipiscing elit.
LOWapps/oxfmt/test/api/js_in_xxx.test.ts43Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Overly Generic Function Names3 hits · 4 pts
SeverityFileLineSnippet
LOWnapi/minify/test/terser.test.ts2809 "function foo(){for(const a of func(value)){console.log(a)}function func(va){return doSomething(va)}}function doSome
LOWnapi/minify/test/terser.test.ts2816 "function foo(){for(const a of func(value)){console.log(a)}function func(va){return doSomething(va)}}function doSome
LOWnapi/minify/test/terser.test.ts2823 "function foo(){for(const a of func(value)){console.log(a)}function func(va){return doSomething(va)}}function doSome
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippet
MEDIUMtasks/ast_tools/src/main.rs136//! # Creating a new Generator or Derive
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippet
LOW.github/workflows/codecov.yml62 # Check if the event is not triggered by a fork by checking whether CODECOV_TOKEN is set
LOW.github/workflows/ci.yml101 # Set profile to minimal and channel to our Minimum Supported Rust Version.