granite-rust/compiler
Eric Huss 2e39a3f6ec
Rollup merge of #93513 - dtolnay:linewidth, r=nagisa
Allow any pretty printed line to have at least 60 chars

Follow-up to #93155. The rustc AST pretty printer has a tendency to get stuck in "vertical smear mode" when formatting highly nested code, where it puts a linebreak at *every possible* linebreak opportunity once the indentation goes beyond the pretty printer's target line width:

```rust
...
                                                              ((&([("test"
                                                                       as
                                                                       &str)]
                                                                     as
                                                                     [&str; 1])
                                                                   as
                                                                   &[&str; 1]),
                                                               (&([]
                                                                     as
                                                                     [ArgumentV1; 0])
                                                                   as
                                                                   &[ArgumentV1; 0]))
...
```

```rust
...
                                                                          [(1
                                                                               as
                                                                               i32),
                                                                           (2
                                                                               as
                                                                               i32),
                                                                           (3
                                                                               as
                                                                               i32)]
                                                                             as
                                                                             [i32; 3]
...
```

This is less common after #93155 because that PR greatly reduced the total amount of indentation, but the "vertical smear mode" failure mode is still just as present when you have deeply nested modules, functions, or trait impls, such as in the case of macro-expanded code from `-Zunpretty=expanded`.

Vertical smear mode is never the best way to format highly indented code though. It does not prevent the target line width from being exceeded, and it produces output that is less readable than just a longer line.

This PR makes the pretty printing algorithm allow a minimum of 60 chars on every line independent of indentation. So as code gets more indented, the right margin eventually recedes to make room for formatting without vertical smear.

```console
├─────────────────────────────────────┤
├─────────────────────────────────────┤
├─────────────────────────────────────┤
  ├───────────────────────────────────┤
    ├─────────────────────────────────┤
      ├───────────────────────────────┤
        ├─────────────────────────────┤
          ├───────────────────────────┤
            ├───────────────────────────┤
              ├───────────────────────────┤
            ├───────────────────────────┤
          ├───────────────────────────┤
        ├─────────────────────────────┤
      ├───────────────────────────────┤
    ├─────────────────────────────────┤
  ├───────────────────────────────────┤
├─────────────────────────────────────┤
```
2022-01-31 20:13:00 -08:00
..
rustc remove unused jemallocator crate 2022-01-28 16:56:05 +01:00
rustc_apfloat Stabilize iter::zip. 2021-12-14 18:50:31 -04:00
rustc_arena Clarify ArenaAllocatable's second parameter. 2022-01-28 07:37:10 +11:00
rustc_ast Make Decodable and Decoder infallible. 2022-01-22 10:38:31 +11:00
rustc_ast_lowering Store def_id_to_hir_id as variant in hir_owner. 2022-01-27 10:46:40 -03:00
rustc_ast_passes Auto merge of #92896 - lqd:update-deps, r=Mark-Simulacrum 2022-01-21 10:38:30 +00:00
rustc_ast_pretty Allow any line to have at least 60 chars 2022-01-31 10:56:57 -08:00
rustc_attr Remove unnecessary sigils around Symbol::as_str() calls. 2021-12-15 17:32:14 +11:00
rustc_borrowck Auto merge of #93095 - Aaron1011:remove-assoc-ident, r=cjgillot 2022-01-25 18:53:45 +00:00
rustc_builtin_macros Rollup merge of #93461 - dtolnay:fmtyield, r=davidtwco 2022-01-31 07:00:42 +01:00
rustc_codegen_cranelift Use an indexmap to avoid sorting LocalDefIds 2022-01-22 22:34:16 -06:00
rustc_codegen_gcc Merge landing_pad and set_cleanup into cleanup_landing_pad 2022-01-24 14:10:05 +01:00
rustc_codegen_llvm Auto merge of #93427 - matthiaskrgr:rollup-esd3ixl, r=matthiaskrgr 2022-01-28 23:20:38 +00:00
rustc_codegen_ssa Rollup merge of #93192 - theidexisted:patch-1, r=wesleywiser 2022-01-30 08:37:50 -08:00
rustc_const_eval Rollup merge of #93358 - compiler-errors:is-not-const, r=fee1-dead 2022-01-30 00:04:11 +01:00
rustc_data_structures Rollup merge of #93193 - Kobzol:stable-hash-permutation-test, r=the8472 2022-01-27 22:32:24 +01:00
rustc_driver Make Decodable and Decoder infallible. 2022-01-22 10:38:31 +11:00
rustc_error_codes Rollup merge of #88205 - danii:e0772, r=GuillaumeGomez 2022-01-29 14:46:29 +01:00
rustc_errors Rollup merge of #93229 - mark-i-m:noquiet, r=eddyb 2022-01-23 20:13:07 +01:00
rustc_expand Rollup merge of #92887 - pietroalbini:pa-bootstrap-update, r=Mark-Simulacrum 2022-01-30 08:37:46 -08:00
rustc_feature Move overlap_mode into trait level attribute + feature flag 2022-01-31 11:50:43 -03:00
rustc_fs_util Migrate to 2021 2021-09-20 22:21:42 -04:00
rustc_graphviz eplace usages of vec![].into_iter with [].into_iter 2022-01-09 14:09:25 +11:00
rustc_hir Store def_id_to_hir_id as variant in hir_owner. 2022-01-27 10:46:40 -03:00
rustc_hir_pretty try apply rustc_pass_by_value to Span 2022-01-27 11:29:41 +01:00
rustc_incremental Make Decodable and Decoder infallible. 2022-01-22 10:38:31 +11:00
rustc_index Make Decodable and Decoder infallible. 2022-01-22 10:38:31 +11:00
rustc_infer Rollup merge of #90277 - pierwill:fix-70258-inference-terms, r=jackh726 2022-01-31 06:58:26 +01:00
rustc_interface expand: Pass everything by reference to pre-expansion lint callback 2022-01-23 19:31:32 +08:00
rustc_lexer Auto merge of #91393 - Julian-Wollersberger:lexer_optimization, r=petrochenkov 2021-12-03 13:20:14 +00:00
rustc_lint Rollup merge of #90277 - pierwill:fix-70258-inference-terms, r=jackh726 2022-01-31 06:58:26 +01:00
rustc_lint_defs Rollup merge of #92611 - Amanieu:asm-reference, r=m-ou-se 2022-01-28 15:20:21 +01:00
rustc_llvm Use error-on-mismatch policy for PAuth module flags. 2022-01-24 16:50:10 +00:00
rustc_log Make rustc_log doc test runnable 2022-01-03 22:31:56 -08:00
rustc_macros Make Decodable and Decoder infallible. 2022-01-22 10:38:31 +11:00
rustc_metadata Auto merge of #88679 - petrochenkov:doctrscope, r=GuillaumeGomez 2022-01-26 09:10:27 +00:00
rustc_middle Auto merge of #93348 - spastorino:fix-perf-overlap-mode2, r=nikomatsakis 2022-01-31 17:36:11 +00:00
rustc_mir_build Check the number of arguments first in is_recursive_call 2022-01-29 23:00:54 +01:00
rustc_mir_dataflow Remove deprecated LLVM-style inline assembly 2022-01-12 18:51:31 +01:00
rustc_mir_transform Auto merge of #93373 - spastorino:def_id_to_hir_id_refactor, r=oli-obk 2022-01-31 14:23:44 +00:00
rustc_monomorphize Change TerminatorKind::Abort to call the panic handler instead of 2022-01-17 00:39:34 +00:00
rustc_parse Rollup merge of #93019 - 5225225:uppercase-suffix, r=wesleywiser 2022-01-31 20:12:55 -08:00
rustc_parse_format Migrate to 2021 2021-09-20 22:21:42 -04:00
rustc_passes Check that #[rustc_must_implement_one_of] is applied to a trait 2022-01-27 22:07:16 +03:00
rustc_plugin_impl replace dynamic library module with libloading 2021-12-06 12:03:47 -05:00
rustc_privacy Remove a span from hir::ExprKind::MethodCall 2022-01-21 07:48:10 -06:00
rustc_query_impl Make Decodable and Decoder infallible. 2022-01-22 10:38:31 +11:00
rustc_query_system Address review comments. 2022-01-22 10:38:34 +11:00
rustc_resolve Store def_id_to_hir_id as variant in hir_owner. 2022-01-27 10:46:40 -03:00
rustc_save_analysis Rollup merge of #90277 - pierwill:fix-70258-inference-terms, r=jackh726 2022-01-31 06:58:26 +01:00
rustc_serialize Remove two unnecessary transmutes from opaque Encoder and Decoder 2022-01-31 18:25:05 +01:00
rustc_session Rollup merge of #93229 - mark-i-m:noquiet, r=eddyb 2022-01-23 20:13:07 +01:00
rustc_span Auto merge of #93348 - spastorino:fix-perf-overlap-mode2, r=nikomatsakis 2022-01-31 17:36:11 +00:00
rustc_symbol_mangling Auto merge of #93095 - Aaron1011:remove-assoc-ident, r=cjgillot 2022-01-25 18:53:45 +00:00
rustc_target Rollup merge of #90277 - pierwill:fix-70258-inference-terms, r=jackh726 2022-01-31 06:58:26 +01:00
rustc_trait_selection Auto merge of #93348 - spastorino:fix-perf-overlap-mode2, r=nikomatsakis 2022-01-31 17:36:11 +00:00
rustc_traits ⬆ chalk to 0.76.0 2022-01-19 13:44:43 -06:00
rustc_ty_utils Rollup merge of #90277 - pierwill:fix-70258-inference-terms, r=jackh726 2022-01-31 06:58:26 +01:00
rustc_type_ir initial revert 2022-01-15 01:16:55 +00:00
rustc_typeck Rollup merge of #91343 - FabianWolff:issue-91328-as-deref, r=jackh726 2022-01-31 20:12:55 -08:00