Skip to content

Commit 81c636c

Browse files
authored
Merge pull request #3231 from epage/hardbreak
Revert "Remove {n} support"
2 parents f596bb3 + e5fbdc9 commit 81c636c

File tree

4 files changed

+43
-11
lines changed

4 files changed

+43
-11
lines changed

CHANGELOG.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,6 @@ Subtle changes (i.e. compiler won't catch):
133133
- `Arg::env`, `Arg::env_os`, `Arg::last`, `Arg::require_equals`, `Arg::allow_hyphen_values`,
134134
`Arg::hide_possible_values`, `Arg::hide_default_value`, `Arg::hide_env_values`,
135135
`Arg::case_insensitive` and `Arg::multiple_values` no longer imply `ArgSettings::TakesValue` ([#2233](https://github.com/clap-rs/clap/issues/2233))
136-
- Removed support for `{n}` as a newline in help text ([#1810](https://github.com/clap-rs/clap/pull/1810))
137136
- `ArgMatches::is_present` no longer checks subcommand names
138137
- Some env variable values are now considered false for flags, not just "not-present" ([clap-rs/clap#2539](https://github.com/clap-rs/clap/issues/2539))
139138
- Changed `...`s meaning in usage parser. Before, it always meant `multiple` which is still true for `--option [val]...`. Now `[name]... --option [val]` results in `ArgSettings::MultipleOccurrences`.

src/build/usage_parser.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1118,11 +1118,11 @@ mod test {
11181118
#[test]
11191119
fn pos_help_newline() {
11201120
let a = Arg::from_usage(
1121-
"[pos]... 'some help\n\
1121+
"[pos]... 'some help{n}\
11221122
info'",
11231123
);
11241124
assert_eq!(a.name, "pos");
1125-
assert_eq!(a.help.unwrap(), "some help\ninfo");
1125+
assert_eq!(a.help.unwrap(), "some help{n}info");
11261126
assert!(a.is_set(ArgSettings::MultipleOccurrences));
11271127
assert!(!a.is_set(ArgSettings::MultipleValues));
11281128
assert!(!a.is_set(ArgSettings::Required));
@@ -1132,11 +1132,11 @@ mod test {
11321132
#[test]
11331133
fn pos_help_newline_lit_sq() {
11341134
let a = Arg::from_usage(
1135-
"[pos]... 'some help\' stuff\n\
1135+
"[pos]... 'some help\' stuff{n}\
11361136
info'",
11371137
);
11381138
assert_eq!(a.name, "pos");
1139-
assert_eq!(a.help.unwrap(), "some help' stuff\ninfo");
1139+
assert_eq!(a.help.unwrap(), "some help' stuff{n}info");
11401140
assert!(a.is_set(ArgSettings::MultipleOccurrences));
11411141
assert!(!a.is_set(ArgSettings::MultipleValues));
11421142
assert!(!a.is_set(ArgSettings::Required));

src/output/help.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ impl<'help, 'app, 'parser, 'writer> Help<'help, 'app, 'parser, 'writer> {
351351
self.parser.app.before_help
352352
};
353353
if let Some(output) = before_help {
354-
self.none(text_wrapper(output, self.term_w))?;
354+
self.none(text_wrapper(&output.replace("{n}", "\n"), self.term_w))?;
355355
self.none("\n\n")?;
356356
}
357357
Ok(())
@@ -369,7 +369,7 @@ impl<'help, 'app, 'parser, 'writer> Help<'help, 'app, 'parser, 'writer> {
369369
};
370370
if let Some(output) = after_help {
371371
self.none("\n\n")?;
372-
self.none(text_wrapper(output, self.term_w))?;
372+
self.none(text_wrapper(&output.replace("{n}", "\n"), self.term_w))?;
373373
}
374374
Ok(())
375375
}
@@ -401,14 +401,14 @@ impl<'help, 'app, 'parser, 'writer> Help<'help, 'app, 'parser, 'writer> {
401401
}
402402

403403
debug!("Help::help: Too long...");
404-
if too_long && spaces <= self.term_w {
404+
if too_long && spaces <= self.term_w || help.contains("{n}") {
405405
debug!("Yes");
406406
debug!("Help::help: help...{}", help);
407407
debug!("Help::help: help width...{}", display_width(&help));
408408
// Determine how many newlines we need to insert
409409
let avail_chars = self.term_w - spaces;
410410
debug!("Help::help: Usable space...{}", avail_chars);
411-
help = text_wrapper(&help, avail_chars);
411+
help = text_wrapper(&help.replace("{n}", "\n"), avail_chars);
412412
} else {
413413
debug!("No");
414414
}
@@ -874,10 +874,10 @@ impl<'help, 'app, 'parser, 'writer> Help<'help, 'app, 'parser, 'writer> {
874874
// In case we're dealing with subcommands i.e. git mv is translated to git-mv
875875
bn.replace(" ", "-")
876876
} else {
877-
text_wrapper(&self.parser.app.name, self.term_w)
877+
text_wrapper(&self.parser.app.name.replace("{n}", "\n"), self.term_w)
878878
}
879879
} else {
880-
text_wrapper(&self.parser.app.name, self.term_w)
880+
text_wrapper(&self.parser.app.name.replace("{n}", "\n"), self.term_w)
881881
};
882882
self.good(&bin_name)?;
883883
Ok(())

tests/builder/help.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1125,6 +1125,24 @@ fn wrapping_newline_chars() {
11251125
));
11261126
}
11271127

1128+
#[test]
1129+
fn wrapping_newline_variables() {
1130+
let app = App::new("ctest")
1131+
.version("0.1")
1132+
.term_width(60)
1133+
.arg(Arg::new("mode").help(
1134+
"x, max, maximum 20 characters, contains symbols.{n}\
1135+
l, long Copy-friendly, 14 characters, contains symbols.{n}\
1136+
m, med, medium Copy-friendly, 8 characters, contains symbols.{n}",
1137+
));
1138+
assert!(utils::compare_output(
1139+
app,
1140+
"ctest --help",
1141+
WRAPPING_NEWLINE_CHARS,
1142+
false
1143+
));
1144+
}
1145+
11281146
#[test]
11291147
fn old_newline_chars() {
11301148
let app = App::new("ctest").version("0.1").arg(
@@ -1140,6 +1158,21 @@ fn old_newline_chars() {
11401158
));
11411159
}
11421160

1161+
#[test]
1162+
fn old_newline_variables() {
1163+
let app = App::new("ctest").version("0.1").arg(
1164+
Arg::new("mode")
1165+
.short('m')
1166+
.help("Some help with some wrapping{n}(Defaults to something)"),
1167+
);
1168+
assert!(utils::compare_output(
1169+
app,
1170+
"ctest --help",
1171+
OLD_NEWLINE_CHARS,
1172+
false
1173+
));
1174+
}
1175+
11431176
#[test]
11441177
fn issue_688_hide_pos_vals() {
11451178
let filter_values = ["Nearest", "Linear", "Cubic", "Gaussian", "Lanczos3"];

0 commit comments

Comments
 (0)