Commit Graph

330 Commits

Author SHA1 Message Date
Seiichi Uchida
84ad70c151 Add ignore config option
For example, with the following config file, rustfmt will ignore `src/types.rs`,
`src/foo/bar.rs` and every file under `examples/` directory.

```toml
[ignore]
files = [
    "src/types.rs",
    "src/foo/bar.rs",
]
directories = [
    "examples",
]
```
2018-03-09 13:37:52 +09:00
Nick Cameron
1780d68761 Catch panics in the parser before they crash rustfmt
Closes #753
2018-03-09 14:59:52 +13:00
Seiichi Uchida
a6b574bfa7 Cargo update and cargo clippy 2018-03-08 18:10:23 +09: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
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
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
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
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
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
dfc67a5df7 Cargo clippy 2018-01-26 14:53:28 +09:00
Seiichi Uchida
154bf8e1af Cargo fmt 2018-01-22 13:05:18 +09:00
K.J. Valencik
1fb172f989 LineOverflow: Count tabs as tab_spaces when measuring line length for overflow 2018-01-19 12:18:25 -05:00
Seiichi Uchida
cf4ab38f67 Hide parse error in format_snippet() 2018-01-11 15:19:23 +09:00
topecongiro
75cb236711 Compare extern crate items with its name instead of span
When we use span, bugs easily sneak in.
2018-01-04 12:49:37 +09:00
Nick Cameron
f86f6dcd9c Format some macros 2.0 macro defs
cc #1539
2018-01-01 19:51:54 +13:00
Nick Cameron
e95541c7d2 Make the import of Config pub 2017-12-28 10:08:27 +13:00
Marcus Klaas
656edbf0f0 Use std time 2017-12-27 16:34:09 +13:00
Marcus Klaas
dc356ffef7 Add rudimentary timing of parsing and formatting phases 2017-12-27 16:33:21 +13:00
Seiichi Uchida
27167cbbaa Format code block in comment
Closes #554.
Closes #1695.
2017-12-24 23:56:51 +09:00
Oliver Schneider
fad903fd14 Move from String to PathBuf where applicable 2017-12-15 10:26:19 +09:00
Seiichi Uchida
3dd31e25bf Use enumerate() 2017-12-11 11:50:11 +09:00
Seiichi Uchida
e45c0c4815 Rename error_on_unformatted_comments_or_strings to error_on_unformatted 2017-12-11 11:48:17 +09:00
Seiichi Uchida
aea19d5e33 Combine error_on_line_overflow_comments/strings
1. Rename to error_on_unformatted_comments_or_strings
2. Set the option to false by default.
2017-12-11 11:48:17 +09:00
Seiichi Uchida
ef6ebaa215 Add a config option to suppress error message on string literal 2017-12-11 11:48:17 +09:00
Seiichi Uchida
414a995926 Replace StringBuffer with String 2017-12-11 09:19:00 +09:00
topecongiro
adc3b12ad4 Remove println! debug :( 2017-12-08 17:48:49 +09:00
topecongiro
821d04b2a4 Do not report errors on skipped items or statements 2017-12-08 17:46:43 +09:00
topecongiro
5e6bb3edb0 Keep track of line number in visitor 2017-12-08 16:59:04 +09:00
Seiichi Uchida
1d9a10e00e Use explicit lifetime to get rid of unsafe code
at least this is why we use Rust
2017-12-07 13:57:54 +09:00
Seiichi Uchida
69a15b2eee Update FmtVisitor::from_codemap() 2017-12-06 22:51:52 +09:00
topecongiro
16184d3e16 Cargo fmt and update a test 2017-12-03 11:34:18 +09:00
clippered
794a215b27 rename to use_colored_tty; used match as well 2017-11-13 20:18:05 +11:00
clippered
d2f2f25463 add cli option for color 2017-11-13 20:18:03 +11:00
Nick Cameron
e6253c4d31 Extract a closures module 2017-11-13 15:27:16 +13:00
topecongiro
05798572bb Remove empty lines at the beginning of the file 2017-11-10 17:09:31 +09:00
topecongiro
d8d9fedf9e Propagate an error rather than panic 2017-11-06 21:48:18 +09:00
topecongiro
3e8f4b7907 Fix PairParts related issues 2017-11-06 21:48:05 +09:00
clippered
3bae42aa5a fix output panics on unable to write to stderr 2017-11-01 23:45:35 +11:00
Nick Cameron
4022b094f8
Merge pull request #2074 from GuillaumeGomez/emitter
Update to last Emitter update
2017-10-28 18:12:46 +13:00
Chris Emerson
92e374e778 Fix a "variable does not need to be mutable" warning. 2017-10-27 22:57:32 +01:00
Nick Cameron
adbe98e522 Merge pull request #2069 from SingingTree/log_path_str_if_after_file_errors
Return a more verbose error when formatting a file fails
2017-10-27 01:39:43 +05:30
Guillaume Gomez
e35e27659d Update to last Emitter update 2017-10-20 17:02:49 +02:00
Matthew McAllister
108e2cd776 Handle #![rustfmt_skip] at file top level 2017-10-20 00:22:23 -07:00
Bryce Van Dyk
47a0bef91c Return a more verbose error when formatting a file fails
Expands the error message returned if the after_file function fails to
also include path_str. This allows users to better identify files that are
not being formatted.
2017-10-20 15:27:35 +13:00
topecongiro
b751030640 Remove unnecessary wrap_str() 2017-09-19 11:40:20 +09:00
Seiichi Uchida
32fa51a6a9 Move Spanned to spanned.rs from lib.rs 2017-09-19 10:04:35 +09:00
Seiichi Uchida
df7d2be562 Move Indent and Shape to shape.rs from lib.rs 2017-09-19 10:04:35 +09:00
Nick Cameron
c313fb1ddc Merge pull request #1973 from topecongiro/issue-1972
Echo back input from stdin when disable_all_formatting is true
2017-09-18 18:06:49 +12:00
Nick Cameron
cccb7f681e Merge pull request #1966 from topecongiro/string-to-cow
Refactoring: use Cow and etc.
2017-09-18 12:45:25 +12:00
Seiichi Uchida
ede179c62e Echo back input from stdin when disable_all_formatting is true 2017-09-17 22:14:28 +09:00
topecongiro
f0580ae91a Use Cow to avoid unnecessary allocation 2017-09-15 18:21:06 +09:00
topecongiro
f51261e93e Cargo fmt 2017-09-15 12:10:58 +09:00
Seiichi Uchida
e6e696f7b0 Avoid cloning String 2017-09-05 01:04:08 +09:00
Nick Cameron
59d1e84259 Merge pull request #1937 from topecongiro/enhance-macro-rewrite
Enhance macro rewrite
2017-08-31 17:43:52 +12:00
topecongiro
848d4559e1 Enhance macro rewrite 2017-08-31 13:52:13 +09:00
Seiichi Uchida
4b79055a15 Apply refactoring from cargo clippy 2017-08-31 12:49:12 +09:00
Nick Cameron
39a91ba292 Fixup warnings and test formatting 2017-08-31 14:20:47 +12:00
Vadim Petrochenkov
6e5c6f5ba3 Use getters to access Span fields 2017-08-31 14:14:13 +12:00
topecongiro
979d131c5d Format and preserve attributes on ast::Stmt 2017-08-30 19:27:36 +09:00
topecongiro
343b315830 Handle macros with tabs 2017-08-27 13:44:49 +09:00
topecongiro
1f9e7c25c9 Implement Rewrite trait for ast::ForeignItem 2017-08-25 08:19:51 +09:00
Michael Smith
2471248370
Fix typo in comment line overflow message
s/error_on_lineoverflow_comments/error_on_line_overflow_comments
2017-08-18 17:11:29 -07:00
topecongiro
5c50766b36 Print error messages with colors if possible 2017-08-15 16:54:18 +09:00
topecongiro
67285f15eb Enhance error messages
with rustc style
2017-08-15 16:54:07 +09:00
topecongiro
4c39e5aeb8 Add fields to FormattingError
is_comment is set to true if the error happened inside comment.
line_buffer is the line which overflowed.
2017-08-15 16:52:11 +09:00
topecongiro
222ae15c7b No more sorry 2017-08-15 16:49:54 +09:00
topecongiro
840edb2c4f Remove 'mut' notation 2017-08-11 17:54:38 +09:00
topecongiro
e69a2aba18 Add error_on_line_overflow_comments config option 2017-08-10 08:13:20 +09:00
topecongiro
c28df858c7 Format source codes and update tests 2017-08-09 00:16:35 +09:00
topecongiro
60fb11e5dd Do not take inner attributes into account for span 2017-08-05 15:21:46 +09:00
Seiichi Uchida
8b970fcc9f Format inner attributes wherever possible 2017-07-25 00:55:55 +09:00
topecongiro
b233653a22 Cover missing comments between attributes and expressions 2017-07-20 23:58:00 +09:00
topecongiro
6fd291981e Sort imports in alphabetical and consistent order 2017-07-13 18:42:14 +09:00
topecongiro
e3310a6a18 Format source codes 2017-07-11 21:53:10 +09:00
topecongiro
08f3f03353 Implement combining against match arms 2017-07-11 21:52:27 +09:00
topecongiro
65790f2b2a Cover missing comments before and after where 2017-07-10 14:38:16 +09:00
Seiichi Uchida
bc63d69c3f Format source codes 2017-07-10 02:24:59 +09:00
Seiichi Uchida
72b155a9e2 Implement rhs_overhead method against Shape 2017-07-10 02:16:57 +09:00
topecongiro
34b4a9d3c4 Add struct_field_align_threshold for vertical alignment 2017-07-03 18:54:41 +09:00
topecongiro
bd991851c8 Format source codes 2017-07-03 18:54:26 +09:00
topecongiro
7eafad96ad Implement Spanned for ast::StructField and ast::Field 2017-07-03 18:48:21 +09:00
Nick Cameron
5f1bab26c4 Move to Libsyntax 2017-06-14 14:01:56 +12:00
topecongiro
c4d84b44ba Avoid overflow 2017-06-14 00:06:48 +09:00
Nick Cameron
18ccd0190e Rebasing 2017-06-13 14:49:47 +12:00
Nick Cameron
1f512948a0 Reformat source code using new defaults 2017-06-13 14:41:49 +12:00
topecongiro
6e3394e635 Use with_emitter instead of with_tty_emitter 2017-06-13 09:18:14 +09:00
topecongiro
762639e7fd Reset the error count of parser from the previous file 2017-06-10 14:34:50 +09:00
est31
727963afe4 Update syntex_syntax
Bases on commit to switch to libsyntax by @nrc
2017-06-06 07:31:47 +02:00
topecongiro
a9f529cba4 Format source codes 2017-06-04 19:35:29 +09:00
Seiichi Uchida
10c3632078 Format source codes 2017-06-01 12:08:25 +09:00
Nick Cameron
393ba27311 Remove dependency on Itertools 2017-05-25 16:23:07 +12:00
Nick Cameron
80f3b3c9c4 Remove multimap dep 2017-05-25 15:59:06 +12:00
Michael Killough
222bac1397 Provide config.set().item(value) API.
This API isn't fantastic, but it's the best I can come up with without
something like `concat_idents!()`. There are relatively few places where
config is set, to hopefully the ugliness isn't disastrous.

Change previous occurences of `config.item = value` to this new API,
rather than using `config.override_value()`. Undo the changes to
`override_value()`, as it's no longer important to propogate the error
to the caller. Add a test for the new interface.
2017-05-18 11:42:32 +07:00
Michael Killough
c0bdbfa531 Switch to accessing config items via method.
Preparation for #865, which proposes adding a flag which outputs which
config options are used during formatting.

This PR should not make any difference to functionality. A lot of this
was search-and-replace.

Some areas worthy of review/discussion:

 - The method for each config item returns a clone of the underlying
   value. We can't simply return an immutable reference, as lots of
   places in the code expect to be able to pass the returned value as
   `bool` (not `&bool). It would be nice if the `bool` items could
   return a copy, but the more complex types a borrowed reference... but
   unfortunately, I couldn't get the macro to do this.
 - A few places (mostly tests and `src/bin/rustfmt.rs`) were overriding
   config items by modifying the fields of the `Config` struct directly.
   They now use the existing `override_value()` method, which has been
   modified to return a `Result` for use by `src/bin/rustfmt.rs`. This
   benefits of this are that the complex `file_lines` and `write_mode`
   strings are now parsed in one place (`Config.override_value`) instead
   of multiple. The disadvantages are that it moves the compile-time
   checks for config names to become run-time checks.
2017-05-16 15:47:09 +07:00
Nick Cameron
d1682b3473 Merge pull request #1510 from fintelia/better-filelines
Better file_lines
2017-05-15 09:19:18 +12:00
topecongiro
2776615dc9 Replace 'try!' with '?' 2017-05-08 13:14:23 +09:00
topecongiro
4a28be486e Refactor Shape 2017-05-08 07:24:32 +09:00
topecongiro
e923df4146 Add indented and with_max_width 2017-05-08 07:24:12 +09:00
Jonathan Behrens
7c6479358b
Respect file_lines within format_lines() function 2017-05-06 15:14:44 -04:00
Nick Cameron
75a13868da Block format control flow discriminant expressions and binops
Fixes #1450

Adds control_style option
2017-05-05 14:37:13 +12:00
est31
78d4ef1992 Drop rustc-serialize, use serde, update toml dependency 2017-05-03 10:23:50 +02:00
topecongiro
9dc643a6ae Remove TODO from 'format_tuple_struct' 2017-05-01 15:57:08 +09:00
topecongiro
883db2f952 Refactor Shape 2017-05-01 15:57:08 +09:00
Evgeny Duzhakov
bb7b002b23 format_lines: fix line_len for config.max_width 2017-04-18 14:31:53 +03:00
Mike Boutin
a0efdf2de9 Do not count \r as part of line width.
Resolves #1335. Does not attempt to handle a `\r` not followed by a `\n` nor
attempt to handle Unicode intricacies (#6) including zero-width or multi-byte
characters.
2017-04-02 11:09:29 -04:00
Nick Cameron
5305bc8436 test fallout 2017-03-28 11:25:59 +13:00
Nick Cameron
5fb1140688 fallout - source reformatting 2017-03-28 11:14:47 +13:00
Nick Cameron
4bb31a7231 Block indenting for struct lit patterns
Now follows struct_lit_style (and most other struct_lit_ options).

Required a fair bit of refactoring and bug fixes.

Fixes #1311
2017-03-22 09:25:26 +13:00
Nick Cameron
33b83ae7df Formatting fallout
Also fixes a minor bug when we break a line after `if` and used to leave a trailing space
2017-03-07 09:50:41 +13:00
Andy Librian
63114f3cac added unit tests for Indent and Shape (#1353) 2017-03-06 07:50:04 +13:00
Nick Cameron
db10a0b9b2 Merge pull request #1325 from C4K3/master
Add error_on_line_overflow option
2017-02-23 14:46:24 +13:00
Nick Cameron
9eb78a3333 Fallout 2017-02-23 13:15:48 +13:00
Nick Cameron
b35906dbce WIP 2017-02-21 16:35:05 +13:00
Sebastian Blunt
f6ccbd71c3
Add error_on_line_overflow option
Makes it configurable whether to error if unable to get all lines within
the max_width.
2017-02-19 19:56:37 +01:00
Craig M. Brandenburg
f2c867d067 New disable_all_formatting config option (#1297)
* New `disable_all_formatting` config option

* Resolve code review comments
2017-02-07 17:11:47 +13:00
Nick Cameron
428339fdc3 Refactor indent and width into Shape struct 2017-01-31 08:35:23 +13:00
Nick Cameron
e018712612 process cfg'ed off modules
Fixes #1229
Fixes #1277
2017-01-20 08:20:49 +13:00
Stepan Koltsov
1c22d85db5 Better message for LineOverflow error (#1268)
(with current length and configured limit)
2017-01-09 15:57:11 +13:00
Nick Cameron
d3eba76e4d update Serde, etc.
Lots of changes to how closures work
2016-11-21 11:02:18 +13:00
Nick Cameron
4418fab4f2 Update to latest Syntex
+ Cargo update
+ 0.6.2 release
2016-09-16 15:28:02 +12:00
sinkuu
a3c63fdef9 Run clippy 2016-08-29 08:57:27 +09:00
Johann Hofmann
8260d277c8
Return failure exit code on found diffs (fix #906)
This changes rustfmt to return exit code 4
when run with write mode diff and differences between
the formatted code and the original code are found.

Useful for CI to make sure your contributors actually ran rustfmt.
2016-06-21 23:01:15 +02:00
Kamal Marhubi
c311b30cac Add type to represent collection of lines in files
This commit adds a type to represent lines in files, and adds it to the
`Config` struct. It will be used for restricting formatting to specific
lines.

Refs #434
2016-05-31 01:24:38 +02:00
Kamal Marhubi
bd10af127e utils: Move codemap related utilities to a dedicated module
This commit adds a `codemap` module, and moves the `CodemapSpanUtils`
added in #857 to it. This is preparation for adding more `Codemap`
specific utilities.

Refs #434
2016-05-31 00:49:26 +02:00
Kamal Marhubi
7f0d87cc51 Derive Debug for the Input enum 2016-05-31 00:43:48 +02:00
Kamal Marhubi
66cac1f3e9 Handle pub(restricted) (#1013)
* Handle pub(restricted)

This commit properly handles pub(restricted) as introduced in RFC 1422
[0]. The syntax support was added in #971, but they were not correctly
formatted.

[0] https://github.com/rust-lang/rfcs/blob/master/text/1422-pub-restricted.md

Fixes #970

* Drop #[inline] attribute on format_visibility

* Make newly non-failing functions return String

The change to `format_visibiilty` means that `format_header` and
`format_unit_struct` can no longer fail. Their return type is updated to
reflect that.
2016-05-28 00:58:25 +02:00
Nick Cameron
ff3ff5aa87 Handle parser errors better 2016-05-18 09:58:51 +12:00
Nick Cameron
9b05461666 Write each file as it is formatted (#991)
The old behaviour stored everything in memory until we were finished. Now we write as soon as we can.

This gives better behaviour when formatting large programs, since there is some progress indication. It also opens the door to optimising memory use by not storing everything in memory unless it is required (which it still might be). That is left as future work though.
2016-05-15 11:41:05 +02:00
Marcus Klaas
eae2921e14 Bootstrap it. Hard. 2016-05-12 21:50:43 +02:00
Daniel Campbell
4a2db3ec6c Changed modules & visitor mods to public, set filemap::write_file public 2016-05-06 12:44:18 +12:00
Micah Chalmer
70611bf9ac Always skip children when using Plain write mode
Outputting child module contents in the "Plain" write mode does not make
sense, since there is no way to differentiate code that came from a
child module from that which came from the parent file.
2016-04-28 01:44:45 -04:00
Nick Cameron
9188ec0f7f Bail out on recovered errors. (#965)
Closes #915
Closes #930
Closes #931
2016-04-27 21:08:44 +02:00
Aleksey Kladov
847bad603e Don't print empty lines to stderr (#940) 2016-04-15 16:52:21 +02:00
Aleksey Kladov
77350e49b5 return non-zero exit code if there were errors 2016-04-15 02:51:50 +03:00
Aleksey Kladov
b1efb3a39e don't silence error unnecessary
This `if` was used to separate error output from the formatting output, when they both used stdout. It was useful for integration with tools, which can submit input to stdin and read pretty printed result from stdout without worrying about errors intermingled with the actual result. 

But now we write errors to `stderr`, so the problem disappears and we can safely remove this `if`.

Errors should never pass silently, unless explicitly silenced.
2016-04-14 01:39:39 +03:00
Srinivas Reddy Thatiparthy
58b022c56a Change stdout to stderr (#925) 2016-04-13 21:22:45 +02:00
Aleksey Kladov
dc1fc4be0f unify format_string and format_file 2016-04-11 22:56:54 +03:00
Srinivas Reddy Thatiparthy
901c5b1a5d use std::error instead std::out 2016-04-06 23:23:02 +05:30
Aleksey Kladov
c29ee66b94 make naming more consistent 2016-04-05 01:20:14 +03:00
Aleksey Kladov
63887ed413 make format_string and fmt_lines private 2016-04-03 00:45:04 +03:00
Aleksey Kladov
ac4532e161 use format_input function in tests 2016-04-03 00:32:24 +03:00