Commit Graph

3342 Commits

Author SHA1 Message Date
David Lukes
bbd6d9cd55 Refactor parsing code into struct
This also splits the giant state machine match expression into separate
methods.
2018-03-05 13:18:27 +01:00
David Lukes
310c1146f2 Move license template parsing into submodule 2018-03-05 13:13:55 +01:00
David Lukes
e48d7f3ebb Account for possibly empty license_template_path
Don't attempt to load license_template if the path wasn't specified.
2018-03-05 13:13:55 +01:00
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
f8f5d5c68c add tests for 2506 2018-03-05 17:35:58 +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
Nick Cameron
7dba56f97b
Merge pull request #2503 from Eijebong/winapi
Bump winapi to 0.3
2018-03-03 11:39:24 +13:00
Nick Cameron
7589ebdc78
Merge pull request #2504 from davidalber/fix-travis-python-setup
Fixing macOS Travis setup
2018-03-03 11:38:50 +13:00
Nick Cameron
2a5b25e5db
Merge pull request #2499 from davidalber/add-rust-code-of-conduct
Adding the Rust Code of Conduct
2018-03-03 11:37:56 +13:00
David Alber
b4caa875f2 Fixing Travis config for Python 3 installation 2018-03-02 09:22:59 -08:00
Bastien Orivel
64f6372f32 Bump winapi to 0.3 2018-03-02 15:20:26 +01:00
Seiichi Uchida
0325d7aabe
Merge pull request #2501 from Eijebong/log
Bump log to 0.4 and env_logger to 0.5
2018-03-02 22:24:19 +09:00
Seiichi Uchida
0bd77f2681 Do not reorder inline modules 2018-03-02 21:53:24 +09:00
Seiichi Uchida
cea5a92a6c Add a test for #2482 2018-03-02 21:53:13 +09:00
Bastien Orivel
5f4eb0f17e Bump log to 0.4 and env_logger to 0.5 2018-03-02 13:08:23 +01:00
David Alber
87d3b3c25a Adding links to the Code of Conduct 2018-03-01 21:58:07 -08: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
Nick Cameron
6154f2b3e5 Fix build 2018-03-02 14:25:26 +13:00
Nick Cameron
ab7b4a8bf5 Revert "Remove rustfmt and cargo-fmt"
This reverts commit 9d2229f2fd.

And `cargo updates`
2018-03-02 14:12:33 +13:00
Nick Cameron
f377d1f59c Revert "Remove cargo-fmt and rustfmt-bin from self_tests()"
This reverts commit 93c349a6c1.
2018-03-02 14:11:28 +13:00
David Alber
73fb380cf1 Adding the Rust Code of Conduct 2018-03-01 12:37:19 -08:00
Nick Cameron
a02b658d2c
Merge pull request #2498 from alexcrichton/update-env-logger
Update env_logger to 0.5
2018-03-02 08:24:32 +13:00
Alex Crichton
2ed8baf934 Update env_logger to 0.5
Helps unify with some dependencies in rust-lang/rust!
2018-03-01 10:31:57 -08:00
Nick Cameron
01873d5194
Merge pull request #2492 from dlukes/feat/fix-tests
Remove cargo-fmt and rustfmt-bin from self_tests()
2018-02-27 21:37:56 +13:00
David Lukes
93c349a6c1 Remove cargo-fmt and rustfmt-bin from self_tests() 2018-02-26 16:22:21 +01:00
Nick Cameron
9d2229f2fd Remove rustfmt and cargo-fmt
Moved them to the rustfmt-bin repo
2018-02-26 16:53:31 +13:00
Nick Cameron
f1281cb440 Add README for rustfmt-core and use rustfmt-config from crates.io 2018-02-26 16:28:04 +13:00
Nick Cameron
7eabc6413d Add a readme for rustfmt-config 2018-02-26 16:25:19 +13:00
Nick Cameron
ee5cb91602
Merge pull request #2489 from topecongiro/issue-2487
Preserve trailing comma on macro in item position
2018-02-25 12:52:27 +13:00
Nick Cameron
2eb57b3897
Merge pull request #2486 from topecongiro/lazy_statics
Format `lazy_static!`
2018-02-25 12:48:57 +13:00
Nick Cameron
fd774dbba3
Merge pull request #2485 from topecongiro/attr
Add `attr` modules and allow `#[name = value]` to exceed max width
2018-02-25 12:47:32 +13:00
Nick Cameron
4d3b73e075
Merge pull request #2483 from topecongiro/error-on-unknown-config-name-in-configurations
Error on outdated Configurations.md
2018-02-25 12:46:07 +13:00
topecongiro
3b79dd9b37 Preserve trailing comma on macro in item position 2018-02-24 11:48:18 +09:00
topecongiro
0f706cd452 Add a test for #2487 2018-02-24 11:48:07 +09:00
topecongiro
b080e79a2f Cargo fmt 2018-02-24 01:18:53 +09:00
topecongiro
f310b924ea Format lazy_static! macro
Some macros like `lazy_static!` cannot be parsed as a valid AST. Therefore, we
need to parse them manually to be able to format them. Obviously this method
will not scale, we will never be able to cover every macro in the entire
ecosystem. That being said, I think it will not hurt to be able to format macros
that are popular (such as `lazy_static!`) as long as rustfmt will not produce
broken code when the macro has syntax that is not expected.
2018-02-24 01:05:19 +09:00
topecongiro
ebfc3af92a Update a test for lazy_static! 2018-02-24 01:04:54 +09:00
topecongiro
72e26a12bc Add a test for formatting lazy_static! 2018-02-24 01:04:36 +09:00
topecongiro
75cf0be87b Add a test for #2479 2018-02-23 23:18:54 +09:00
topecongiro
0d8636f229 Allow meta item's value to exceed max width 2018-02-23 23:15:29 +09:00
topecongiro
b17c522650 Add doc comment to rewrite_first_group_attrs 2018-02-23 22:58:46 +09:00
topecongiro
eea5dcac46 Add a test for #2414
Closes #2414.
2018-02-23 22:53:16 +09:00
topecongiro
391ed68ad4 Move type punctuation tests under config dir 2018-02-23 22:53:16 +09:00
topecongiro
e2e653bc8f Remove unused tests 2018-02-23 22:53:16 +09:00