2140 Commits

Author SHA1 Message Date
David Lukes
ead81205cc Simplify match → if let 2018-03-05 13:13:55 +01:00
David Lukes
ad76741bca Move license template parsing into config phase 2018-03-05 13:13:55 +01:00
David Lukes
d012d52b4d Parse template with state machine instead of regex
This allows occurrences of `{` and `}` within `{}` placeholders in the
template, and also for having literal `{` and `}` in the template by
means of escaping (`\{`).

Unbalanced, unescaped `}` at the toplevel is a syntax error which
currently triggers a panic; I'll add proper error handling as I move the
license template parsing code into the config parsing phase.
2018-03-05 13:11:21 +01:00
David Lukes
2eebe614c7 Attempt at checking for license (#209)
I'm not quite sure how best to handle loading the license template from
a path -- I mean obviously I know *how* to do it, but I'm not sure where
to fit it in the codebase :) So this first attempt puts the license
template directly into the config file.

These are my misgivings about the license template config option as a
path to a file (I'd love feedback if some of these are wrong or can be
easily circumvented!):

1. I thought the obvious choice for the type of `license_template` in
`create_config!` should be `PathBuf`, but `PathBuf` doesn't implement
`FromStr` (yet? see https://github.com/rust-lang/rust/issues/44431), so
it would have to be wrapped in a tuple struct, and I went down that road
for a little while but then it seemed like too much ceremony for too
little gain.

2. So a plain `String` then (which, mind you, also means the same
`doc_hint()`, i.e. `<string>`, not `<path>` or something like that). The
fact that it's a valid path will be checked once we try to read the
file.

3. But where in the code should the license template be read? The
obvious choice for me would be somewhere in `Config::from_toml()`, but
since `Config` is defined via the `create_config!` macro, that would
mean tight coupling between the macro invocation (which defines the
configuration option `license_template`) and its definition (which would
rely on the existence of that option to run the template loading code).

4. `license_template` could also be made a special option which is
hardwired into the macro. This gets rid of the tight coupling, but
special-casing one of the config options would make the code harder to
navigate.

5. Instead, the macro could maybe be rewritten to allow for config
options that load additional resources from files when the config is
being parsed, but that's beyond my skill level I'm afraid (and probably
overengineering the problem if it's only ever going to be used for this
one option).

6. Finally, the file can be loaded at some later point in time, e.g. in
`format_lines()`, right before `check_license()` is called. But to
face a potential *IO* error at so late a stage, when the source files
have already been parsed... I don't know, it doesn't feel right.

BTW I don't like that I'm actually parsing the license template as late
as inside `check_license()` either, but for much the same reasons, I
don't know where else to put it. If the `Config` were hand-rolled
instead of a macro, I'd just define a custom `license_template` option
and load and parse the template in the `Config`'s init. But the way
things are, I'm a bit at a loss.

However, if someone more familiar with the project would kindly provide
a few hints as to how the path approach can be done in a way that is as
clean as possible in the context of the codebase, I'll be more than
happy to implement it! :)
2018-03-05 13:11:21 +01:00
topecongiro
93d454aed7 Only format code blocks in comments with rust syntax notation 2018-03-05 19:30:08 +09:00
kngwyu
078fbb0819 support dyn keyword(2506) 2018-03-05 16:57:22 +09:00
Nick Cameron
5025a53b30
Merge pull request #2502 from topecongiro/fix-reorder-module
Fix reorder module
2018-03-05 11:20:48 +13:00
Bastien Orivel
64f6372f32 Bump winapi to 0.3 2018-03-02 15:20:26 +01:00
Seiichi Uchida
0bd77f2681 Do not reorder inline modules 2018-03-02 21:53:24 +09:00
Nick Cameron
4f522794ae Tidy up and pass tests 2018-03-02 15:07:13 +13:00
Nick Cameron
39301ae5f2 Go back to a non-workspace structure
Kinda reverts https://github.com/rust-lang-nursery/rustfmt/pull/2419
2018-03-02 14:58:23 +13:00
topecongiro
9c9b31c13b Create git-rustfmt crate 2018-02-07 22:49:56 +09:00
topecongiro
d28d7fee89 Create rustfmt-format-diff crate 2018-02-07 22:49:43 +09:00
topecongiro
d18cd1d11c Create rustfmt-bin crate 2018-02-07 22:49:26 +09:00
topecongiro
3920282deb Create cargo-fmt crate 2018-02-07 22:49:10 +09:00
topecongiro
66b25f1b4a Create rustfmt_config crate 2018-02-07 22:48:52 +09:00
topecongiro
4af2aa3a9e Create rustfmt_core crate 2018-02-07 22:48:05 +09:00
Nick Cameron
c9e250a1ab
Merge pull request #2417 from topecongiro/issue-2415
Avoid orphan in chain with punctuation
2018-02-06 21:23:14 +13:00
topecongiro
5e0c6f9716 Avoid orphan in chain with punctuation 2018-02-06 09:36:29 +09:00
topecongiro
7f949a5018 Explicitly disable colored output when it is not supported 2018-02-06 09:29:00 +09:00
Seiichi Uchida
d85e1db178
Merge pull request #2393 from RReverser/macro_rules
Format stable macro_rules
2018-02-05 09:56:26 +09:00
Nick Cameron
c4314df1ab
Merge pull request #2412 from topecongiro/issue-2399
Do not reorder items with '#[macro_use]'
2018-02-05 11:28:58 +13:00
Ingvar Stepanyan
8691c64e99 cargo run cargo-fmt
Reformat codebase with current version to pass self_tests (formats macros without repetitions).
2018-02-04 12:09:03 +00:00
Ingvar Stepanyan
d8c154f052 Extract branch rewrite function 2018-02-04 11:55:08 +00:00
Ingvar Stepanyan
571af9d4b1 Format 2018-02-04 11:54:03 +00:00
Ingvar Stepanyan
bc9185451d Move ; between macro branches to a separator 2018-02-04 11:54:03 +00:00
Ingvar Stepanyan
6377c52233 Fix comment handling in macros 2018-02-04 11:54:03 +00:00
Ingvar Stepanyan
70e7716262 Comments WIP 2018-02-04 11:54:03 +00:00
Ingvar Stepanyan
41c393c751 Keep delimiter as part of macro args list 2018-02-04 11:53:10 +00:00
Ingvar Stepanyan
9423cdba82 Omit newline for empty macro branches 2018-02-04 11:53:10 +00:00
Ingvar Stepanyan
5bd036fcac Optimise common => {{ macro pattern 2018-02-04 11:53:10 +00:00
Ingvar Stepanyan
1b9fd01343 Support compact macros 2.0 representation 2018-02-04 11:53:10 +00:00
Ingvar Stepanyan
9318b4d2cf Update some macro tests 2018-02-04 11:53:10 +00:00
Ingvar Stepanyan
5d973d2e8c Initial support for macros 1.1 2018-02-04 11:53:09 +00:00
Seiichi Uchida
f815858420 Use correct offset when unindenting code block
When using hard tabs, we should only remove '\t'.
2018-02-04 17:21:10 +09:00
Seiichi Uchida
3bb0a2a749 Do not reorder items with '#[macro_use]'
Reordering items with `#[macro_use]` could change the semantic of source code.
There could exist other attributes that requires special treatment.
2018-02-04 12:08:02 +09:00
Nick Cameron
346238f497
Merge pull request #2410 from topecongiro/skip-repeat-macro
Skip rewriting macro def with repeat
2018-02-04 14:33:03 +13:00
Seiichi Uchida
61b23a4293 Skip rewriting macro def with repeat 2018-02-04 08:52:50 +09:00
Nick Cameron
30a28a262c Make is_mod_decl more accommodating
Fixes #2403 (I think)
2018-02-02 15:16:29 +13:00
Nick Cameron
7c3a422742 Update libsyntax crates 2018-02-02 14:18:30 +13:00
Nick Cameron
b7f01769f9
Merge branch 'master' into init-shorthand 2018-02-01 15:20:01 +13:00
Nick Cameron
918e79bb5a
Merge pull request #2380 from topecongiro/reorder-mods
[RFC] Reorder modules alphabetically
2018-02-01 15:18:34 +13:00
csmoe
28bb16a5a0 add a support for immovable generators 2018-01-30 22:14:33 +08:00
Seiichi Uchida
c9c346a89f Add 'use_field_init_shorthand' config option 2018-01-29 22:15:20 +09:00
Seiichi Uchida
4c9ab8b405 Cargo fmt with modules reordering enabled 2018-01-29 22:00:07 +09:00
Seiichi Uchida
56c6d73d82 Reorder modules
Add `reorder_modules` config option.

Two things we must keep in mind when reordering modules:
1. We should not reorder modules with attributes, as doing so could
   potentially break the code (e.g. `#[macro_use]`).
2. We should not reorder inline modules e.g. `mod foo { /* .. */ }`.
   We should only reorder module declarations e.g. `mod foo;`.

Some open questions:
1. Should we bring modules with `pub` in front of those without `pub`
   so that they stand out from others?
2. Instead of keeping modules with attributes in the same place,
   can we bring them in front of others? Is this safe?
2018-01-29 21:59:15 +09:00
Seiichi Uchida
7d63490d85 Update to the latest libsyntax changes 2018-01-29 21:44:26 +09:00
Nick Cameron
4633786848
Merge pull request #2396 from topecongiro/issue-2389
Put attributes and enum variants on different lines
2018-01-29 10:36:26 +11:00
Seiichi Uchida
c60d865b98 Put attributes and enum variants on different lines 2018-01-26 16:20:00 +09:00
Seiichi Uchida
dfc67a5df7 Cargo clippy 2018-01-26 14:53:28 +09:00