dfmt/README.md

69 lines
4.3 KiB
Markdown

# dfmt [![Build Status](https://travis-ci.org/Hackerpilot/dfmt.svg)](https://travis-ci.org/Hackerpilot/dfmt)
**dfmt** is a formatter for D source code
## Status
**dfmt** is alpha-quality. Make backups of your files or use source control.
## Building
### Using Make
* Clone the repository
* Run ```git submodule update --init``` in the dfmt directory
* To compile with DMD, run ```make``` in the dfmt directory. To compile with
LDC, run ```make ldc``` instead. The generated binary will be placed in ```dfmt/bin/```.
## Using
By default, dfmt reads its input from ```stdin``` and writes to ```stdout```.
If a file name is specified on the command line, input will be read from the
file instead, and output will be written to ```stdout```.
### Options
* ```--help```:
* ```--inplace```: a file name is required and the file will be edited in-place.
* ```--align_switch_statements```: See ```dfmt_align_switch_statements``` below
* ```--brace_style```: See ``brace_style``` below
* ```--end_of_line```: See ```end_of_line``` below
* ```--indent_size```: See ```indent_size``` below
* ```--indent_style```: See ```indent_style``` below
* ```--max_line_length```: See ```max_line_length``` below
* ```--soft_max_line_length```: See ```dfmt_soft_max_line_length``` below
* ```--outdent_attributes```: See ```dfmt_outdent_attributes``` below
* ```--outdent_labels```: See ```dfmt_outdent_labels``` below
* ```--space_after_cast```: See ```dfmt_space_after_cast``` below
* ```--split_operator_at_line_end```: See ```dfmt_split_operator_at_line_end``` below
* ```--tab_width```: See ```tab_width``` below
### Example
```dfmt --inplace --space_after_cast=false --max_line_length=80 --soft_max_line_length=70 file.d```
## Configuration
**dfmt** uses [EditorConfig](http://editorconfig.org/) configuration files.
**dfmt**-specific properties are prefixed with *dfmt_*.
### Standard EditorConfig properties
Property Name | Allowed Values | Default Value | Description
--------------|----------------|---------------|------------
end_of_line | `cr`, `crlf` and `lf` | `lf` | [See EditorConfig documentation.](https://github.com/editorconfig/editorconfig/wiki/EditorConfig-Properties#end_of_line)
insert_final_newline | | `true` | Not supported. **dfmt** always inserts a final newline.
charset | | `UTf-8` | Not supported. **dfmt** only works correctly on UTF-8.
indent_style | `tab`, `space` | `space` | [See EditorConfig documentation.](https://github.com/editorconfig/editorconfig/wiki/EditorConfig-Properties#indent_style)
indent_size | positive integers | `4` | [See EditorConfig documentation.](https://github.com/editorconfig/editorconfig/wiki/EditorConfig-Properties#indent_size)
tab_width | positive integers | `8` | [See EditorConfig documentation.](https://github.com/editorconfig/editorconfig/wiki/EditorConfig-Properties#tab_width)
trim_trailing_whitespace | | `true` | Not supported. **dfmt** does not emit trailing whitespace.
max_line_length | positive integers | `120` | [See EditorConfig documentation.](https://github.com/editorconfig/editorconfig/wiki/EditorConfig-Properties#max_line_length)
### dfmt-specific properties
Property Name | Allowed Values | Default Value | Description
--------------|----------------|---------------|------------
dfmt_brace_style | `allman`, `otbs`, or `stroustrup` | `allman` | [See Wikipedia](https://en.wikipedia.org/wiki/Brace_style)
dfmt_soft_max_line_length | positive integers | `80` | The formatting process will usually keep lines below this length, but they may be up to max_line_length columns long.
dfmt_outdent_labels (Not yet implemented) | `true`, `false` | `true` | Decrease the indentation of labels
dfmt_align_switch_statements (Not yet implemented) | `true`, `false` | `true` | Align labels, cases, and defaults with their enclosing switch
dfmt_outdent_attributes (Not yet implemented) | `true`, `false` | `true` | Decrease the indentation level of attributes
dfmt_split_operator_at_line_end (Not yet implemented) | `true`, `false` | `false` | Place operators on the end of the previous line when splitting lines
dfmt_space_after_cast | `true`, `false` | `false` | Insert space after the closing paren of a `cast` expression
dfmt_space_after_keywords (Not yet implemented) | `true`, `false` | `true` | Insert space after `if`, `while`, `foreach`, etc, and before the `(`
## Terminology
* Braces - `{` and `}`
* Brackets - `[` and `]`
* Parenthesis / Parens - `(` and `)`