https://github.com/dprint/dprint-plugin-exec
Formatting plugin for dprint that formats code via other formatting CLI tools.
https://github.com/dprint/dprint-plugin-exec
Last synced: over 1 year ago
JSON representation
Formatting plugin for dprint that formats code via other formatting CLI tools.
- Host: GitHub
- URL: https://github.com/dprint/dprint-plugin-exec
- Owner: dprint
- License: mit
- Created: 2022-01-22T21:54:15.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-07-11T04:19:50.000Z (about 2 years ago)
- Last Synced: 2024-07-12T04:51:55.704Z (about 2 years ago)
- Language: Rust
- Homepage:
- Size: 280 KB
- Stars: 18
- Watchers: 3
- Forks: 1
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# dprint-plugin-exec
Plugin that formats code via mostly any formatting CLI found on the host machine.
This plugin executes CLI commands to format code via stdin (recommended) or via a file path.
## Install
1. Install [dprint](https://dprint.dev/install/)
2. Follow instructions at https://github.com/dprint/dprint-plugin-exec/releases/
## Configuration
1. Add general configuration if desired (shown below).
1. Add binaries similar to what's shown below and specify what file extensions they match via a `exts` property.
```jsonc
{
// ...etc...
"exec": {
// lets the plugin know the cwd, see https://dprint.dev/config/#configuration-variables
"cwd": "${configDir}",
// general config (optional -- shown are the defaults)
"lineWidth": 120,
"indentWidth": 2,
"useTabs": false,
"cacheKey": "1",
"timeout": 30,
// now define your commands, for example...
"commands": [{
"command": "rustfmt",
"exts": ["rs"]
}, {
"command": "java -jar formatter.jar {{file_path}}",
"exts": ["java"]
}, {
"command": "yapf",
"exts": ["py"]
}]
},
"plugins": [
// run `dprint config add exec` to add the latest exec plugin's url here
]
}
```
General config:
- `cacheKey` - Optional value used to bust dprint's incremental cache (ex. provide `"1"`). This is useful if you want to force formatting to occur because the underlying command's code has changed.
- `timeout` - Number of seconds to allow an executable format to occur before a timeout error occurs (default: `30`).
- `cwd` - Recommend setting this to `${configDir}` to force it to use the cwd of the current config file.
Command config:
- `command` - Command to execute.
- `exts` - Array of file extensions to format with this command.
- `fileNames` - Array of file names to format with this command (useful for files without extensions).
- `associations` - File patterns to format with this command. If specified, then you MUST specify associations on this plugin's config as well.
- You may have associations match multiple binaries in order to format a file with multiple binaries instead of just one. The order in the config file will dictate the order the formatting occurs in.
- `stdin` - If the text should be provided via stdin (default: `true`)
- `cwd` - Current working directory to use when launching this command (default: dprint's cwd or the root `cwd` setting if set)
Command templates (ex. see the prettier example above):
- `{{file_path}}` - File path being formatted.
- `{{line_width}}` - Configured line width.
- `{{use_tabs}}` - Whether tabs should be used.
- `{{indent_width}}` - Whether tabs should be used.
- `{{cwd}}` - Current working directory.
- `{{timeout}}` - Specified timeout in seconds.
### Example - yapf
```jsonc
{
// ...etc...
"exec": {
"cwd": "${configDir}",
"commands": [{
"command": "yapf",
"exts": ["py"]
}]
},
"plugins": [
// run `dprint config add exec` to add the latest exec plugin's url here
]
}
```
### Example - java
```jsonc
{
// ...etc...
"exec": {
"cwd": "${configDir}",
"commands": [{
"command": "java -jar formatter.jar {{file_path}}",
"exts": ["java"]
}]
},
"plugins": [
// run `dprint config add exec` to add the latest exec plugin's url here
]
}
```
### Example - rustfmt
Use the `rustfmt` binary so you can format stdin.
```jsonc
{
// ...etc...
"exec": {
"cwd": "${configDir}",
"commands": [{
"command": "rustfmt --edition 2021",
"exts": ["rs"]
}]
},
"plugins": [
// run `dprint config add exec` to add the latest exec plugin's url here
]
}
```
### Example - prettier
Consider using [dprint-plugin-prettier](https://dprint.dev/plugins/prettier/) instead as it will be much faster.
```jsonc
{
// ...etc...
"exec": {
"cwd": "${configDir}",
"commands": [{
"command": "prettier --stdin-filepath {{file_path}} --tab-width {{indent_width}} --print-width {{line_width}}",
// add more extensions that prettier should format
"exts": ["js", "ts", "html"]
}]
},
"plugins": [
// run `dprint config add exec` to add the latest exec plugin's url here
]
}
```