[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$schema":"http://json-schema.org/draft-04/schema#","additionalProperties":false,"description":"Settings for project analysis by the Application Inspector","id":"https://json.schemastore.org/aiproj-1.6.json","properties":{"$schema":{"type":"string"},"Version":{"type":"string","enum":["1.0","1.1","1.2","1.3","1.4","1.5","1.6"]},"BlackBoxSettings":{"type":["object","null"],"title":"Black box and autocheck options","additionalProperties":false,"properties":{"AdditionalHttpHeaders":{"title":"Additional HTTP headers","description":"Dictionary of additional HTTP headers","type":["array","null"],"items":{"type":"object","properties":{"Key":{"title":"Header","type":"string"},"Value":{"type":"string","title":"value"}}}},"WhiteListedAddresses":{"type":["array","null"],"title":"Whitelisted addresses","description":"Addresses, that was added in white list","items":{"type":"object","properties":{"Address":{"title":"Address","description":"Address value","type":"string"},"Format":{"type":"string","title":"Address format","description":"Type of address","enum":["Wildcard","ExactMatch","RegExp"]}}}},"BlackListedAddresses":{"type":["array","null"],"title":"Blacklisted addresses","description":"Addresses, that was added in black list","items":{"type":"object","properties":{"Address":{"title":"Address","description":"Address value","type":"string"},"Format":{"type":"string","title":"Address format","description":"Type of address","enum":["Wildcard","ExactMatch","RegExp"]}}}},"Authentication":{"oneOf":[{"type":"object","required":["Cookie","Type"],"properties":{"Type":{"enum":["RawCookie"]},"Cookie":{"type":"object"}}},{"type":"object","required":["Form","Type"],"properties":{"Type":{"enum":["Form"]},"Form":{"type":"object"}}},{"type":"object","required":["Http","Type"],"properties":{"Type":{"enum":["Http"]},"Http":{"type":"object"}}},{"type":"object","required":["Type"],"properties":{"Type":{"enum":["None"]}}},{"type":"null"}],"type":["object","null"],"title":"Authentication options","additionalProperties":false,"properties":{"Cookie":{"type":["object","null"],"title":"Cookie options","description":"Cookie authentication options","required":["Cookie","ValidationAddress","ValidationTemplate"],"additionalProperties":false,"properties":{"Cookie":{"title":"Cookie","type":"string"},"ValidationAddress":{"title":"Validation address","description":"Verification address","type":"string"},"ValidationTemplate":{"title":"Validation template","description":"String to search for","type":"string"}}},"Form":{"type":["object","null"],"title":"Form","description":"Form-based authentication options","additionalProperties":false,"properties":{"FormDetection":{"type":"string","title":"Detection","description":"Type of form authentication detection","enum":["Auto","Manual"]},"FormAddress":{"title":"Sign-in form URL"},"FormXPath":{"title":"Sign-in form XPath"},"Login":{"title":"User"},"LoginKey":{"title":"User identifier"},"Password":{"title":"Password"},"PasswordKey":{"title":"Password identifier"},"ValidationTemplate":{"title":"Validation template","description":"String to search for"}},"anyOf":[{"properties":{"FormDetection":{"enum":["Auto"]},"FormAddress":{"type":["string"]},"FormXPath":{"type":["null","string"]},"Login":{"type":"string"},"LoginKey":{"type":["null","string"]},"Password":{"type":"string"},"PasswordKey":{"type":["null","string"]},"ValidationTemplate":{"type":["string"]}},"required":["FormDetection","Login","Password","FormAddress","ValidationTemplate"]},{"properties":{"FormDetection":{"enum":["Manual"]},"FormAddress":{"type":["string"]},"FormXPath":{"type":["string"]},"Login":{"type":"string"},"LoginKey":{"type":["string"]},"Password":{"type":"string"},"PasswordKey":{"type":["string"]},"ValidationTemplate":{"type":["string"]}},"required":["FormDetection","Login","Password","FormAddress","ValidationTemplate","LoginKey","PasswordKey","FormXPath"]}]},"Http":{"type":["object","null"],"title":"Http","description":"HTTP Basic authentication options","additionalProperties":false,"required":["Login","Password","ValidationAddress"],"properties":{"Login":{"title":"User","type":"string"},"Password":{"title":"Password","type":"string"},"ValidationAddress":{"title":"Validation address","type":"string"}}},"Type":{"title":"Type of authentication","type":"string","enum":["Form","Http","RawCookie","None"]}}},"Level":{"title":"Search mode","type":"string","enum":["None","Fast","Full","Normal"]},"ProxySettings":{"type":["object","null"],"title":"Proxy settings","description":"Proxy server settings","additionalProperties":false,"properties":{"Enabled":{"title":"Enabled","type":"boolean"},"Host":{"title":"Address","type":["null","string"]},"Login":{"title":"User","type":["null","string"]},"Password":{"title":"Password","type":["null","string"]},"Port":{"title":"Port","type":"integer"},"Type":{"title":"Type of proxy","type":"string","enum":["Http","Socks4","Socks5"]}}},"RunAutocheckAfterScan":{"title":"Run autocheck","description":"Autocheck vulnerabilities after scanning","type":"boolean"},"ScanScope":{"title":"Scan scope","type":"string","enum":["Domain","Folder","Path"]},"Site":{"title":"Website address","type":"string"},"SslCheck":{"title":"Check ssl connection","type":"boolean"}}},"WindowsDotNetSettings":{"type":["object","null"],"title":".NET scan options","additionalProperties":false,"properties":{"ProjectType":{"title":"Type of application","type":"string","enum":["None","Solution","WebSite"]},"SolutionFile":{"title":"Solution file","description":"Path to a solution or project","type":["null","string"]},"UsePublicAnalysisMethod":{"title":"Use public analysis method","type":["null","boolean"]},"DownloadDependencies":{"title":"Download dependencies","type":["null","boolean"]},"CustomParameters":{"title":"Custom parameters","description":"Custom DotNet kernel startup parameters","type":["null","string"]}}},"DotNetSettings":{"type":["object","null"],"title":".NET scan options","additionalProperties":false,"properties":{"ProjectType":{"title":"Type of application","type":"string","enum":["None","Solution","WebSite"]},"SolutionFile":{"title":"Solution file","description":"Path to a solution or project","type":["null","string"]},"UsePublicAnalysisMethod":{"title":"Use public analysis method","type":["null","boolean"]},"DownloadDependencies":{"title":"Download dependencies","type":["null","boolean"]},"CustomParameters":{"title":"Custom parameters","description":"Custom DotNet kernel startup parameters","type":["null","string"]}}},"GoSettings":{"type":["object","null"],"title":"Go scan options","additionalProperties":false,"properties":{"UsePublicAnalysisMethod":{"title":"Use public analysis method","type":["null","boolean"]},"CustomParameters":{"title":"Custom parameters","description":"Custom Go kernel startup parameters","type":["null","string"]}}},"JavaSettings":{"type":["object","null"],"title":"Java scan options","additionalProperties":false,"properties":{"Parameters":{"title":"JVM start options","type":["null","string"]},"UnpackUserPackages":{"title":"Unpack custom JAR files","type":"boolean"},"UserPackagePrefixes":{"title":"Prefixes of custom packages","type":["null","string"]},"Version":{"title":"JDK version","type":"string","enum":["8","11","17","21"]},"UsePublicAnalysisMethod":{"title":"Use public analysis method","type":["null","boolean"]},"DownloadDependencies":{"title":"Download dependencies","type":["null","boolean"]},"DependenciesPath":{"title":"Dependencies path","description":"Path that the Java kernel will use as a classPath","type":["null","string"]},"CustomParameters":{"title":"Custom parameters","description":"Custom Java kernel startup parameters","type":["null","string"]}}},"JavaScriptSettings":{"type":["object","null"],"title":"JavaScript scan options","additionalProperties":false,"properties":{"UsePublicAnalysisMethod":{"title":"Use public analysis method","type":["null","boolean"]},"UseTaintAnalysis":{"title":"Use taint analysis method","type":["null","boolean"]},"UseJsaAnalysis":{"title":"Use jsa core for analysis","type":["null","boolean"]},"DownloadDependencies":{"title":"Download dependencies","type":["null","boolean"]},"CustomParameters":{"title":"Custom parameters","description":"Custom JavaScript kernel startup parameters","type":["null","string"]}}},"PhpSettings":{"type":["object","null"],"title":"Php scan options","additionalProperties":false,"properties":{"UsePublicAnalysisMethod":{"title":"Use public analysis method","type":["null","boolean"]},"DownloadDependencies":{"title":"Download dependencies","type":["null","boolean"]},"CustomParameters":{"title":"Custom parameters","description":"Custom Php kernel startup parameters","type":["null","string"]}}},"PmTaintSettings":{"type":["object","null"],"title":"PmTaint scan options","additionalProperties":false,"properties":{"UsePublicAnalysisMethod":{"title":"Use public analysis method","type":["null","boolean"]},"CustomParameters":{"title":"Custom parameters","description":"Custom PmTaint kernel startup parameters","type":["null","string"]}}},"PygrepSettings":{"type":["object","null"],"title":"Pygrep scan options","additionalProperties":false,"properties":{"CustomParameters":{"title":"Custom parameters","description":"Custom Pygrep kernel startup parameters","type":["null","string"]},"RulesDirPath":{"title":"Custom rules","description":"Path to the custom rules directory","type":["null","string"]}}},"PythonSettings":{"type":["object","null"],"title":"Python scan options","additionalProperties":false,"properties":{"UsePublicAnalysisMethod":{"title":"Use public analysis method","type":["null","boolean"]},"DownloadDependencies":{"title":"Download dependencies","type":["null","boolean"]},"DependenciesPath":{"title":"Dependencies path","description":"Path to venv or path to directory with dependencies if venv was not used to restore them","type":["null","string"]},"CustomParameters":{"title":"Custom parameters","description":"Custom Python kernel startup parameters","type":["null","string"]}}},"MailingProjectSettings":{"type":["object","null"],"title":"Mail settings","description":"Report mailing options","additionalProperties":false,"properties":{"Enabled":{"title":"Send a report by email after scanning","type":"boolean"},"MailProfileName":{"title":"Email profile name","type":["null","string"]},"EmailRecipients":{"title":"List of recipients","type":"array","items":{"type":"string","format":"email"}}},"oneOf":[{"type":"object","properties":{"Enabled":{"enum":[true]},"MailProfileName":{"type":"string","minLength":1},"EmailRecipients":{"type":"array","minItems":1,"maxItems":10}},"required":["Enabled","MailProfileName","EmailRecipients"]},{"properties":{"Enabled":{"enum":[false]},"MailProfileName":{"type":["null","string"]},"EmailRecipients":{"type":"array","minItems":0,"maxItems":10}},"required":["Enabled"]}]},"RubySettings":{"type":["object","null"],"title":"Ruby scan options","additionalProperties":false,"properties":{"UsePublicAnalysisMethod":{"title":"Use public analysis method","type":["null","boolean"]},"CustomParameters":{"title":"Custom parameters","description":"Custom Ruby kernel startup parameters","type":["null","string"]}}},"ScaSettings":{"type":["object","null"],"title":"SCA scan options","additionalProperties":false,"properties":{"CustomParameters":{"title":"Custom parameters","description":"Custom SCA kernel startup parameters","type":["null","string"]},"BuildDependenciesGraph":{"title":"Build bependencies graph","type":["null","boolean"]}}},"ProgrammingLanguages":{"title":"Active scanning languages","type":"array","uniqueItems":true,"items":{"type":"string","enum":["Java","CSharp (Windows, Linux)","CSharp (Windows)","VB","Php","JavaScript","Python","ObjectiveC","Swift","CAndCPlusPlus","Go","Kotlin","Sql","Ruby","Solidity"]}},"ProjectName":{"title":"Project name","type":"string"},"ScanModules":{"title":"Enabled modules","type":"array","uniqueItems":true,"items":{"type":"string","enum":["Configuration","Components","BlackBox","PatternMatching","StaticCodeAnalysis","SoftwareCompositionAnalysis"]}},"Tags":{"title":"Project tags","type":["array","null"],"uniqueItems":true,"items":{"additionalProperties":false,"type":"object","properties":{"Type":{"type":"string","enum":["Repo","Branch"]},"Value":{"type":"string"}}}},"SkipGitIgnoreFiles":{"title":"Skip .gitignore files","description":"Exclude from scanning the files from the .gitignore file","type":"boolean"},"UseSastRules":{"title":"Use SAST rules","description":"Enable SAST Analysis rules","type":"boolean"},"UseCustomPmRules":{"title":"Use custom PM rules","description":"Enable custom PM rules","type":"boolean"},"UseSecurityPolicies":{"title":"Use security policies","description":"Check for compliance with the security policy","type":"boolean"}},"required":["ProjectName","ProgrammingLanguages","ScanModules"],"title":"aiproj","type":"object"}
</schema>

[User] Provide a JSON object that satisfies the schema "aiproj". Here are the required top‑level fields: ProjectName, ProgrammingLanguages, ScanModules. Return only the valid JSON object.

Settings for project analysis by the Application Inspector

Black box and autocheck options

Additional HTTP headers

Dictionary of additional HTTP headers

Header

value

Whitelisted addresses

Addresses, that was added in white list

Address

Address value

Address format

Type of address

Blacklisted addresses

Addresses, that was added in black list

Address

Address value

Address format

Type of address

Authentication options

Cookie options

Cookie authentication options

Cookie

Validation address

Verification address

Validation template

String to search for

Form

Form-based authentication options

Detection

Type of form authentication detection

Sign-in form URL

Sign-in form XPath

User

User identifier

Password

Password identifier

Validation template

String to search for

FormDetection Login Password FormAddress ValidationTemplate LoginKey PasswordKey FormXPath

Http

HTTP Basic authentication options

User

Password

Validation address

Type of authentication

Search mode

Proxy settings

Proxy server settings

Enabled

Address

User

Password

Port

Type of proxy

Run autocheck

Autocheck vulnerabilities after scanning

Scan scope

Website address

Check ssl connection

.NET scan options

Type of application

Solution file

Path to a solution or project

Use public analysis method

Download dependencies

Custom parameters

Custom DotNet kernel startup parameters

.NET scan options

Type of application

Solution file

Path to a solution or project

Use public analysis method

Download dependencies

Custom parameters

Custom DotNet kernel startup parameters

Go scan options

Use public analysis method

Custom parameters

Custom Go kernel startup parameters

Java scan options

JVM start options

Unpack custom JAR files

Prefixes of custom packages

JDK version

Use public analysis method

Download dependencies

Dependencies path

Path that the Java kernel will use as a classPath

Custom parameters

Custom Java kernel startup parameters

JavaScript scan options

Use public analysis method

Use taint analysis method

Use jsa core for analysis

Download dependencies

Custom parameters

Custom JavaScript kernel startup parameters

Php scan options

Use public analysis method

Download dependencies

Custom parameters

Custom Php kernel startup parameters

PmTaint scan options

Use public analysis method

Custom parameters

Custom PmTaint kernel startup parameters

Pygrep scan options

Custom parameters

Custom Pygrep kernel startup parameters

Custom rules

Path to the custom rules directory

Python scan options

Use public analysis method

Download dependencies

Dependencies path

Path to venv or path to directory with dependencies if venv was not used to restore them

Custom parameters

Custom Python kernel startup parameters

Mail settings

Report mailing options

Send a report by email after scanning

Email profile name

List of recipients

Ruby scan options

Use public analysis method

Custom parameters

Custom Ruby kernel startup parameters

SCA scan options

Custom parameters

Custom SCA kernel startup parameters

Build bependencies graph

Active scanning languages

Java
CSharp (Windows, Linux)
CSharp (Windows)
VB
Php
JavaScript
Python
ObjectiveC
Swift
CAndCPlusPlus
Go
Kotlin
Sql
Ruby
Solidity

Project name

Enabled modules

Configuration Components BlackBox PatternMatching StaticCodeAnalysis SoftwareCompositionAnalysis

Project tags

Skip .gitignore files

Exclude from scanning the files from the .gitignore file

Use SAST rules

Enable SAST Analysis rules

Use custom PM rules

Enable custom PM rules

Use security policies

Check for compliance with the security policy

aiproj

Provide a JSON object that satisfies the schema "aiproj". Here are the required top‑level fields: ProjectName, ProgrammingLanguages, ScanModules. Return only the valid JSON object.


[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$schema":"http://json-schema.org/draft-07/schema#","title":"TomlOptions","description":"The Rust representation of `air.toml`\n\nThe names and types of the fields in this struct determine the names and types that can be specified in the `air.toml`.\n\nEvery field is optional at this point, nothing is \"finalized\". Finalization is done in [TomlOptions::into_settings].\n\nGlobal options are specified at top level in the TOML file. All other options are nested within their own `[table]`.","type":"object","properties":{"format":{"description":"Options to configure code formatting.","anyOf":[{"$ref":"#/definitions/FormatTomlOptions"},{"type":"null"}]}},"additionalProperties":false,"definitions":{"FormatTomlOptions":{"description":"Configures the way air formats your code.","type":"object","properties":{"default-exclude":{"description":"Air automatically excludes a default set of folders and files. If this option is set to `false`, these files will be formatted as well.\n\nThe default set of excluded patterns are: - `.git/` - `renv/` - `revdep/` - `cpp11.R` - `RcppExports.R` - `extendr-wrappers.R` - `import-standalone-*.R`","type":["boolean","null"]},"exclude":{"description":"By default, Air will refuse to format files matched by patterns listed in `default-exclude`. Use this option to supply an additional list of exclude patterns.\n\nExclude patterns are modeled after what you can provide in a [.gitignore](https://git-scm.com/docs/gitignore), and are resolved relative to the parent directory that your `air.toml` is contained within. For example, if your `air.toml` was located at `root/air.toml`, then:\n\n- `file.R` excludes a file named `file.R` located anywhere below `root/`. This is equivalent to `**/file.R`.\n\n- `folder/` excludes a directory named `folder` (and all of its children) located anywhere below `root/`. You can also just use `folder`, but this would technically also match a file named `folder`, so the trailing slash is preferred when targeting directories. This is equivalent to `**/folder/`.\n\n- `/file.R` excludes a file named `file.R` located at `root/file.R`.\n\n- `/folder/` excludes a directory named `folder` (and all of its children) located at `root/folder/`.\n\n- `file-*.R` excludes R files named like `file-this.R` and `file-that.R` located anywhere below `root/`.\n\n- `folder/*.R` excludes all R files located at `root/folder/`. Note that R files in directories under `folder/` are not excluded in this case (such as `root/folder/subfolder/file.R`).\n\n- `folder/**/*.R` excludes all R files located anywhere below `root/folder/`.\n\n- `**/folder/*.R` excludes all R files located directly inside a `folder/` directory, where the `folder/` directory itself can /// appear anywhere.\n\nSee the full [.gitignore](https://git-scm.com/docs/gitignore) documentation for all of the patterns you can provide.","type":["array","null"],"items":{"type":"string"}},"indent-style":{"description":"Whether to use spaces or tabs for indentation.\n\n`indent-style = \"space\"` (default):\n\n```r fn <- function() { cat(\"Hello\") # Spaces indent the `cat()` call. } ```\n\n`indent-style = \"tab\"`:\n\n```r fn <- function() { cat(\"Hello\") # A tab `\\t` indents the `cat()` call. } ```\n\nAir defaults to spaces due to the overwhelming amount of existing R code written in this style, but consider using tabs for new projects to improve accessibility.\n\nSee `indent-width` to configure the number of spaces per indentation and the tab width.","anyOf":[{"$ref":"#/definitions/IndentStyle"},{"type":"null"}]},"indent-width":{"description":"The number of spaces per indentation level (tab).\n\nThe value must be greater than or equal to `1` and less than or equal to `24`. The default value is `2`.\n\nUsed by the formatter to determine the visual width of a tab.\n\nThis option changes the number of spaces the formatter inserts when using `indent-style = \"space\"`. It also represents the width of a tab when `indent-style = \"tab\"` for the purposes of computing the `line-width`.","anyOf":[{"$ref":"#/definitions/IndentWidth"},{"type":"null"}]},"line-ending":{"description":"The character air uses at the end of a line.\n\n- `auto`: The newline style is detected automatically on a file per file basis. Files with mixed line endings will be converted to the first detected line ending. Defaults to `\\n` for files that contain no line endings. - `lf`: Line endings will be converted to `\\n`. The default line ending on Unix. - `crlf`: Line endings will be converted to `\\r\\n`. The default line ending on Windows. - `native`: Line endings will be converted to `\\n` on Unix and `\\r\\n` on Windows.","anyOf":[{"$ref":"#/definitions/LineEnding"},{"type":"null"}]},"line-width":{"description":"The line width at which the formatter prefers to wrap lines.\n\nThe value must be greater than or equal to `1` and less than or equal to `320`.\n\nNote: While the formatter will attempt to format lines such that they remain within the `line-width`, it isn't a hard upper bound, and formatted lines may exceed the `line-width`.","anyOf":[{"$ref":"#/definitions/LineWidth"},{"type":"null"}]},"persistent-line-breaks":{"description":"Air respects a small set of persistent line breaks as an indication that certain function calls or function signatures should be left expanded. If this option is set to `false`, persistent line breaks are ignored.\n\nIt may be preferable to ignore persistent line breaks if you prefer that `line-width` should be the only value that influences line breaks.","type":["boolean","null"]},"skip":{"description":"Air typically formats every function call it comes across. To skip formatting of a single one-off function call, you can use a `# fmt: skip` comment. However, if you know of particular functions that you use a lot that are part of a custom domain specific language that doesn't follow conventional formatting rules, you can entirely opt out of formatting for those functions by providing them here.\n\nFor example, using `skip = [\"graph_from_literal\"]` would automatically skip formatting of:\n\n```r igraph::graph_from_literal(Alice +--+ Bob) ```\n\nIn the short term, we also anticipate that this will be useful to avoid formatting of `tibble::tribble()` calls. In the long term, we may have more sophisticated features for automatically formatting using a specified alignment.","anyOf":[{"$ref":"#/definitions/Skip"},{"type":"null"}]}},"additionalProperties":false},"IndentStyle":{"oneOf":[{"description":"Tab","type":"string","enum":["tab"]},{"description":"Space","type":"string","enum":["space"]}]},"IndentWidth":{"description":"Validated value for the `indent-width` formatter options\n\nThe allowed range of values is 1..=24","type":"integer","format":"uint8","maximum":24.0,"minimum":1.0},"LineEnding":{"oneOf":[{"description":"The newline style is detected automatically on a file per file basis. Files with mixed line endings will be converted to the first detected line ending. Defaults to [`LineEnding::Lf`] for a files that contain no line endings.","type":"string","enum":["auto"]},{"description":"Line endings will be converted to `\\n` as is common on Unix.","type":"string","enum":["lf"]},{"description":"Line endings will be converted to `\\r\\n` as is common on Windows.","type":"string","enum":["crlf"]},{"description":"Line endings will be converted to `\\n` on Unix and `\\r\\n` on Windows.","type":"string","enum":["native"]}]},"LineWidth":{"description":"Validated value for the `line-width` formatter options\n\nThe allowed range of values is 1..=320","type":"integer","format":"uint16","maximum":320.0,"minimum":1.0},"Skip":{"description":"Function names that are automatically skipped without the need for a `fmt: skip` comment.\n\n# Notes\n\nInternally wrapped in an [Arc] for cheap cloning, since we know the function names are immutable and can be shared. Must be an [Arc] because settings are shared across threads when doing parallel file discovery.\n\nClippy recommends [Arc] wrapping the immutable `[String]` over the mutable `Vec<String>` because with [Arc] you are basically promising not to mutate the inner object, and [Arc] provides a special `From<Vec<T>> for Arc<[T]>` for exactly this use case, which we invoke in [Skip::new()].\n\n# Safety\n\nThis vector is sorted at creation, for use with binary search during lookups.","type":"array","items":{"type":"string"}}}}
</schema>

[User] Provide a JSON object that satisfies the schema "TomlOptions". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.

TomlOptions

The Rust representation of `air.toml`

The names and types of the fields in this struct determine the names and types that can be specified in the `air.toml`.

Every field is optional at this point, nothing is "finalized". Finalization is done in [TomlOptions::into_settings].

Global options are specified at top level in the TOML file. All other options are nested within their own `[table]`.

Options to configure code formatting.

Configures the way air formats your code.

Air automatically excludes a default set of folders and files. If this option is set to `false`, these files will be formatted as well.

The default set of excluded patterns are: - `.git/` - `renv/` - `revdep/` - `cpp11.R` - `RcppExports.R` - `extendr-wrappers.R` - `import-standalone-*.R`

By default, Air will refuse to format files matched by patterns listed in `default-exclude`. Use this option to supply an additional list of exclude patterns.

Exclude patterns are modeled after what you can provide in a [.gitignore](https://git-scm.com/docs/gitignore), and are resolved relative to the parent directory that your `air.toml` is contained within. For example, if your `air.toml` was located at `root/air.toml`, then:

- `file.R` excludes a file named `file.R` located anywhere below `root/`. This is equivalent to `**/file.R`.

- `folder/` excludes a directory named `folder` (and all of its children) located anywhere below `root/`. You can also just use `folder`, but this would technically also match a file named `folder`, so the trailing slash is preferred when targeting directories. This is equivalent to `**/folder/`.

- `/file.R` excludes a file named `file.R` located at `root/file.R`.

- `/folder/` excludes a directory named `folder` (and all of its children) located at `root/folder/`.

- `file-*.R` excludes R files named like `file-this.R` and `file-that.R` located anywhere below `root/`.

- `folder/*.R` excludes all R files located at `root/folder/`. Note that R files in directories under `folder/` are not excluded in this case (such as `root/folder/subfolder/file.R`).

- `folder/**/*.R` excludes all R files located anywhere below `root/folder/`.

- `**/folder/*.R` excludes all R files located directly inside a `folder/` directory, where the `folder/` directory itself can /// appear anywhere.

See the full [.gitignore](https://git-scm.com/docs/gitignore) documentation for all of the patterns you can provide.

Whether to use spaces or tabs for indentation.

`indent-style = "space"` (default):

```r fn <- function() { cat("Hello") # Spaces indent the `cat()` call. } ```

`indent-style = "tab"`:

```r fn <- function() { cat("Hello") # A tab `\t` indents the `cat()` call. } ```

Air defaults to spaces due to the overwhelming amount of existing R code written in this style, but consider using tabs for new projects to improve accessibility.

See `indent-width` to configure the number of spaces per indentation and the tab width.

The number of spaces per indentation level (tab).

The value must be greater than or equal to `1` and less than or equal to `24`. The default value is `2`.

Used by the formatter to determine the visual width of a tab.

This option changes the number of spaces the formatter inserts when using `indent-style = "space"`. It also represents the width of a tab when `indent-style = "tab"` for the purposes of computing the `line-width`.

The character air uses at the end of a line.

- `auto`: The newline style is detected automatically on a file per file basis. Files with mixed line endings will be converted to the first detected line ending. Defaults to `\n` for files that contain no line endings. - `lf`: Line endings will be converted to `\n`. The default line ending on Unix. - `crlf`: Line endings will be converted to `\r\n`. The default line ending on Windows. - `native`: Line endings will be converted to `\n` on Unix and `\r\n` on Windows.

The line width at which the formatter prefers to wrap lines.

The value must be greater than or equal to `1` and less than or equal to `320`.

Note: While the formatter will attempt to format lines such that they remain within the `line-width`, it isn't a hard upper bound, and formatted lines may exceed the `line-width`.

Air respects a small set of persistent line breaks as an indication that certain function calls or function signatures should be left expanded. If this option is set to `false`, persistent line breaks are ignored.

It may be preferable to ignore persistent line breaks if you prefer that `line-width` should be the only value that influences line breaks.

Air typically formats every function call it comes across. To skip formatting of a single one-off function call, you can use a `# fmt: skip` comment. However, if you know of particular functions that you use a lot that are part of a custom domain specific language that doesn't follow conventional formatting rules, you can entirely opt out of formatting for those functions by providing them here.

For example, using `skip = ["graph_from_literal"]` would automatically skip formatting of:

```r igraph::graph_from_literal(Alice +--+ Bob) ```

In the short term, we also anticipate that this will be useful to avoid formatting of `tibble::tribble()` calls. In the long term, we may have more sophisticated features for automatically formatting using a specified alignment.

Tab

Space

Validated value for the `indent-width` formatter options

The allowed range of values is 1..=24

The newline style is detected automatically on a file per file basis. Files with mixed line endings will be converted to the first detected line ending. Defaults to [`LineEnding::Lf`] for a files that contain no line endings.

Line endings will be converted to `\n` as is common on Unix.

Line endings will be converted to `\r\n` as is common on Windows.

Validated value for the `line-width` formatter options

The allowed range of values is 1..=320

Function names that are automatically skipped without the need for a `fmt: skip` comment.

# Notes

Internally wrapped in an [Arc] for cheap cloning, since we know the function names are immutable and can be shared. Must be an [Arc] because settings are shared across threads when doing parallel file discovery.

Clippy recommends [Arc] wrapping the immutable `[String]` over the mutable `Vec<String>` because with [Arc] you are basically promising not to mutate the inner object, and [Arc] provides a special `From<Vec<T>> for Arc<[T]>` for exactly this use case, which we invoke in [Skip::new()].

# Safety

This vector is sorted at creation, for use with binary search during lookups.

Provide a JSON object that satisfies the schema "TomlOptions". Here are the required top‑level fields: none (all optional). Return only the valid JSON object.