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 dprint
- Follow instructions at https://github.com/dprint/dprint-plugin-exec/releases/
- Add general configuration if desired (shown below).
- Add binaries similar to what's shown below and specify what file extensions they match via a
extsproperty.
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.- If you want to automatically calculate the cache key, consider using
command.cacheKeyFiles.
- If you want to automatically calculate the cache key, consider using
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 rootcwdsetting if set)cacheKeyFiles- A list of paths (relative tocwd) to files used to automatically compute acacheKey. This allows automatic invalidation of dprint's incremental cache when any of these files are changed.
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.
{
// ...etc...
"exec": {
"cwd": "${configDir}",
"commands": [{
"command": "yapf",
"exts": ["py"]
}]
},
"plugins": [
// run `dprint config add exec` to add the latest exec plugin's url here
]
}{
// ...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
]
}Use the rustfmt binary so you can format stdin.
{
// ...etc...
"exec": {
"cwd": "${configDir}",
"commands": [{
"command": "rustfmt --edition 2024",
"exts": ["rs"],
// add the config files for automatic cache invalidation when the rust version or rustfmt config changes
"cacheKeyFiles": [
"rustfmt.toml",
"rust-toolchain.toml"
]
}]
},
"plugins": [
// run `dprint config add exec` to add the latest exec plugin's url here
]
}Consider using dprint-plugin-prettier instead as it will be much faster.
{
// ...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"],
// add the config files for automatic cache invalidation when the prettier config config changes
"cacheKeyFiles": [
".prettierrc.json"
]
}]
},
"plugins": [
// run `dprint config add exec` to add the latest exec plugin's url here
]
}
{ // ...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 ] }