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
168 changes: 85 additions & 83 deletions Cargo.lock

Large diffs are not rendered by default.

125 changes: 63 additions & 62 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,70 +1,71 @@
[package]
description = "Crate used to generate pages from the Rust source code of Biome"
edition = "2024"
name = "codegen"
publish = false
version = "0.1.0"
description = "Crate used to generate pages from the Rust source code of Biome"
edition = "2024"
name = "codegen"
publish = false
version = "0.1.0"

[[bin]]
name = "codegen"
path = "codegen/src/main.rs"
name = "codegen"
path = "codegen/src/main.rs"

[lib]
name = "codegen"
path = "codegen/src/lib.rs"
name = "codegen"
path = "codegen/src/lib.rs"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
anyhow = "1.0.100"
biome_analyze = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c", features = [
"schema",
] }
biome_cli = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_configuration = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c", features = [
"schema",
] }
biome_console = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_css_analyze = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_css_parser = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_css_syntax = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_deserialize = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_diagnostics = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_flags = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_formatter = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_fs = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_graphql_analyze = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_graphql_parser = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_graphql_syntax = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_html_analyze = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_html_parser = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_html_syntax = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_js_analyze = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_js_formatter = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_js_parser = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_js_syntax = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_json_analyze = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_json_factory = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_json_formatter = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_json_parser = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_json_syntax = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_module_graph = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_project_layout = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_rowan = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_ruledoc_utils = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_service = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_string_case = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_test_utils = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
biome_text_edit = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c" }
bpaf = { version = "0.9.20", features = ["docgen"] }
xtask_codegen = { git = "https://github.com/biomejs/biome.git", rev = "e039f3b17cdf4e4b7c2ae9b0b0c58a9800b5703c", features = [
"schema",
] }
# Needed to fix some weird dependency
lock_api = "0.4.14"
# If you update this library, be aware of the breaking changes
camino = "1.2.1"
pulldown-cmark = "0.13.0"
schemars = "1.1.0"
serde = "1.0.228"
serde_json = "1.0.145"
ureq = "3.1.4"
anyhow = "1.0.100"
biome_analyze = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1", features = [
"schema",
] }
biome_cli = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_configuration = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1", features = [
"schema",
] }
biome_console = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_css_analyze = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_css_parser = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_css_semantic = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_css_syntax = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_deserialize = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_diagnostics = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_flags = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_formatter = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_fs = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_graphql_analyze = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_graphql_parser = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_graphql_syntax = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_html_analyze = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_html_parser = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_html_syntax = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_js_analyze = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_js_formatter = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_js_parser = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_js_syntax = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_json_analyze = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_json_factory = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_json_formatter = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_json_parser = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_json_syntax = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_module_graph = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_project_layout = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_rowan = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_ruledoc_utils = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_service = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_string_case = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_test_utils = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
biome_text_edit = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1" }
bpaf = { version = "0.9.20", features = ["docgen"] }
xtask_codegen = { git = "https://github.com/biomejs/biome.git", rev = "d407efb8c650b9288f545efedd4b7d3f9783c8d1", features = [
"schema",
] }
# Needed to fix some weird dependency
lock_api = "0.4.14"
# If you update this library, be aware of the breaking changes
camino = "1.2.1"
pulldown-cmark = "0.13.0"
schemars = "1.1.0"
serde = "1.0.228"
serde_json = "1.0.145"
ureq = "3.1.4"
14 changes: 10 additions & 4 deletions codegen/src/lintdoc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ use biome_console::{
fmt::{Formatter, HTML},
markup,
};
use biome_css_analyze::CssAnalyzerServices;
use biome_css_parser::CssParserOptions;
use biome_css_syntax::CssLanguage;
use biome_deserialize::json::deserialize_from_json_ast;
Expand All @@ -27,6 +28,7 @@ use biome_html_parser::HtmlParseOptions;
use biome_html_syntax::HtmlLanguage;
use biome_js_parser::JsParserOptions;
use biome_js_syntax::{EmbeddingKind, JsFileSource, JsLanguage};
use biome_json_analyze::JsonAnalyzeServices;
use biome_json_factory::make;
use biome_json_formatter::context::JsonFormatOptions;
use biome_json_formatter::format_node;
Expand Down Expand Up @@ -1651,8 +1653,11 @@ fn print_diagnostics_or_actions(
};

let options = test.create_analyzer_options::<JsonLanguage>(config)?;

biome_json_analyze::analyze(&root, filter, &options, file_source, |signal| {
let json_services = JsonAnalyzeServices {
file_source,
configuration_source: None,
};
biome_json_analyze::analyze(&root, filter, &options, json_services, |signal| {
match to_print_kind {
ToPrintKind::Diagnostics => {
if let Some(mut diag) = signal.diagnostic() {
Expand Down Expand Up @@ -1713,8 +1718,9 @@ fn print_diagnostics_or_actions(
};

let options = test.create_analyzer_options::<CssLanguage>(config)?;

biome_css_analyze::analyze(&root, filter, &options, &[], |signal| {
let semantic_model = biome_css_semantic::semantic_model(&root);
let services = CssAnalyzerServices::default().with_semantic_model(&semantic_model);
biome_css_analyze::analyze(&root, filter, &options, services, &[], |signal| {
match to_print_kind {
ToPrintKind::Diagnostics => {
if let Some(mut diag) = signal.diagnostic() {
Expand Down
2 changes: 2 additions & 0 deletions redirects.js
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,7 @@ export default {
'/linter/rules/useAsConstAssertion': '/linter/rules/use-as-const-assertion',
'/linter/rules/useAtIndex': '/linter/rules/use-at-index',
'/linter/rules/useAwait': '/linter/rules/use-await',
'/linter/rules/useAwaitThenable': '/linter/rules/use-await-thenable',
'/linter/rules/useBiomeIgnoreFolder': '/linter/rules/use-biome-ignore-folder',
'/linter/rules/useBlockStatements': '/linter/rules/use-block-statements',
'/linter/rules/useButtonType': '/linter/rules/use-button-type',
Expand All @@ -296,6 +297,7 @@ export default {
'/linter/rules/useDefaultSwitchClauseLast': '/linter/rules/use-default-switch-clause-last',
'/linter/rules/useDeprecatedDate': '/linter/rules/use-deprecated-date',
'/linter/rules/useDeprecatedReason': '/linter/rules/use-deprecated-reason',
'/linter/rules/useDestructuring': '/linter/rules/use-destructuring',
'/linter/rules/useEnumInitializers': '/linter/rules/use-enum-initializers',
'/linter/rules/useErrorMessage': '/linter/rules/use-error-message',
'/linter/rules/useExhaustiveDependencies': '/linter/rules/use-exhaustive-dependencies',
Expand Down
2 changes: 1 addition & 1 deletion src/components/generated/linter/NumberOfRules.astro

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions src/content/docs/linter/domains.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ Rules that belong to the domain:
- [noUnnecessaryConditions](/linter/rules/no-unnecessary-conditions) [(nursery)](/linter/#nursery)
- [noUnresolvedImports](/linter/rules/no-unresolved-imports) [(nursery)](/linter/#nursery)
- [useArraySortCompare](/linter/rules/use-array-sort-compare) [(nursery)](/linter/#nursery)
- [useAwaitThenable](/linter/rules/use-await-thenable) [(nursery)](/linter/#nursery)
- [useExhaustiveSwitchCases](/linter/rules/use-exhaustive-switch-cases) (recommended) [(nursery)](/linter/#nursery)
- [useFind](/linter/rules/use-find) [(nursery)](/linter/#nursery)
- [useRegexpExec](/linter/rules/use-regexp-exec) [(nursery)](/linter/#nursery)
Expand Down
2 changes: 2 additions & 0 deletions src/content/docs/linter/javascript/rules.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,9 @@ Below the list of rules supported by Biome, divided by group. Here's a legend of
| [noVueReservedProps](/linter/rules/no-vue-reserved-props) | Disallow reserved names to be used as props. | |
| [noVueSetupPropsReactivityLoss](/linter/rules/no-vue-setup-props-reactivity-loss) | Disallow destructuring of `props` passed to `setup` in Vue projects. | |
| [useArraySortCompare](/linter/rules/use-array-sort-compare) | Require Array#sort and Array#toSorted calls to always provide a compareFunction. | |
| [useAwaitThenable](/linter/rules/use-await-thenable) | Enforce that `await` is only used on `Promise` values. | <span class='inline-icon' title="This rule is not released yet"><Icon name="moon" label="This rule is not released yet" size="1.2rem" /></span> |
| [useConsistentArrowReturn](/linter/rules/use-consistent-arrow-return) | Enforce consistent arrow function bodies. | <span class='inline-icon' title='The rule has a safe fix.'><Icon name="seti:config" label="The rule has a safe fix" size="1.2rem" /></span> |
| [useDestructuring](/linter/rules/use-destructuring) | Require destructuring from arrays and/or objects | <span class='inline-icon' title="This rule is not released yet"><Icon name="moon" label="This rule is not released yet" size="1.2rem" /></span> |
| [useExhaustiveSwitchCases](/linter/rules/use-exhaustive-switch-cases) | Require switch-case statements to be exhaustive. | <span class='inline-icon' title="The rule has an unsafe fix" ><Icon name="warning" label="The rule has an unsafe fix" size="1.2rem" /></span> |
| [useExplicitType](/linter/rules/use-explicit-type) | Enforce types in functions, methods, variables, and parameters. | |
| [useFind](/linter/rules/use-find) | Enforce the use of Array.prototype.find() over Array.prototype.filter() followed by [0] when looking for a single result. | |
Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/linter/json/rules.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Below the list of rules supported by Biome, divided by group. Here's a legend of

| Rule name | Description | Properties |
| --- | --- | --- |
| [noBiomeFirstException](/linter/rules/no-biome-first-exception) | Prevents the use of the `!` pattern in the first position of `files.includes` in the configuration file. | <span class='inline-icon' title="This rule is recommended" ><Icon name="approve-check-circle" size="1.2rem" label="This rule is recommended" /></span><span class='inline-icon' title='The rule has a safe fix.'><Icon name="seti:config" label="The rule has a safe fix" size="1.2rem" /></span> |
| [noBiomeFirstException](/linter/rules/no-biome-first-exception) | Prevents the misuse of glob patterns inside the `files.includes` field. | <span class='inline-icon' title="This rule is recommended" ><Icon name="approve-check-circle" size="1.2rem" label="This rule is recommended" /></span><span class='inline-icon' title='The rule has a safe fix.'><Icon name="seti:config" label="The rule has a safe fix" size="1.2rem" /></span> |
| [noDuplicateObjectKeys](/linter/rules/no-duplicate-object-keys) | Disallow two keys with the same name inside objects. | <span class='inline-icon' title="This rule is recommended" ><Icon name="approve-check-circle" size="1.2rem" label="This rule is recommended" /></span> |
| [noQuickfixBiome](/linter/rules/no-quickfix-biome) | Disallow the use if `quickfix.biome` inside editor settings file. | <span class='inline-icon' title="This rule is recommended" ><Icon name="approve-check-circle" size="1.2rem" label="This rule is recommended" /></span><span class='inline-icon' title='The rule has a safe fix.'><Icon name="seti:config" label="The rule has a safe fix" size="1.2rem" /></span> |
| [useBiomeIgnoreFolder](/linter/rules/use-biome-ignore-folder) | Promotes the correct usage for ignoring folders in the configuration file. | <span class='inline-icon' title="This rule is recommended" ><Icon name="approve-check-circle" size="1.2rem" label="This rule is recommended" /></span><span class='inline-icon' title='The rule has a safe fix.'><Icon name="seti:config" label="The rule has a safe fix" size="1.2rem" /></span> |
Expand Down
36 changes: 32 additions & 4 deletions src/content/docs/linter/rules/no-biome-first-exception.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,18 @@ import { Tabs, TabItem } from '@astrojs/starlight/components';

```
## Description
Prevents the use of the `!` pattern in the first position of `files.includes` in the configuration file.
Prevents the misuse of glob patterns inside the `files.includes` field.

## Leading of negated patterns

If the first pattern of `files.includes` starts with the leading `!`, Biome won't have any file to crawl. Generally,
it is a good practice to declare the files/folders to include first, and then the files/folder to ignore.

Check the [official documentation](https://biomejs.dev/guides/configure-biome/#exclude-files-via-configuration) for more examples.

## Examples
### Examples

### Invalid
#### Invalid

```json
{
Expand All @@ -48,7 +50,7 @@ Check the [official documentation](https://biomejs.dev/guides/configure-biome/#e
}
```

### Valid
#### Valid

```json
{
Expand All @@ -58,6 +60,32 @@ Check the [official documentation](https://biomejs.dev/guides/configure-biome/#e
}
```

## Leading with catch-all `**`

If the user configuration file extends from other sources (other configuration files or libraries), and those files contain the catch-all glob `**` in `files.includes`,
the rule will trigger a violation if also the user configuration file has a `**`.

#### Invalid

```jsonc
// biome.json
{
"extends": ["./base.json"],
"files": {
"includes": ["**", "!**/test"]
}
}
```

```jsonc
// base.json
{
"files": {
"includes": ["**", "!**/dist"]
}
}
```

## Related links

- [Disable a rule](/linter/#disable-a-rule)
Expand Down
Loading