mirror of
https://github.com/clap-rs/clap
synced 2024-12-14 23:02:31 +00:00
chore: clippy run
This commit is contained in:
parent
bb52d2d194
commit
0410873d8d
5 changed files with 149 additions and 70 deletions
|
@ -114,7 +114,7 @@ macro_rules! _handle_group_reqs{
|
||||||
debugln!("macro=_handle_group_reqs!;");
|
debugln!("macro=_handle_group_reqs!;");
|
||||||
for grp in $me.groups.values() {
|
for grp in $me.groups.values() {
|
||||||
let mut found = false;
|
let mut found = false;
|
||||||
for name in grp.args.iter() {
|
for name in &grp.args {
|
||||||
if name == &$arg.name() {
|
if name == &$arg.name() {
|
||||||
vec_remove!($me.required, name);
|
vec_remove!($me.required, name);
|
||||||
if let Some(ref reqs) = grp.requires {
|
if let Some(ref reqs) = grp.requires {
|
||||||
|
|
|
@ -96,7 +96,7 @@ impl<'a, 'b> Parser<'a, 'b> where 'a: 'b {
|
||||||
Parser { meta: AppMeta::with_name(n), ..Default::default() }
|
Parser { meta: AppMeta::with_name(n), ..Default::default() }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn help_short<'z>(&mut self, s: &'z str) {
|
pub fn help_short(&mut self, s: &str) {
|
||||||
self.help_short = s.trim_left_matches(|c| c == '-')
|
self.help_short = s.trim_left_matches(|c| c == '-')
|
||||||
.chars()
|
.chars()
|
||||||
.nth(0);
|
.nth(0);
|
||||||
|
@ -116,7 +116,7 @@ impl<'a, 'b> Parser<'a, 'b> where 'a: 'b {
|
||||||
panic!("Non-unique argument name: {} is already in use", a.name);
|
panic!("Non-unique argument name: {} is already in use", a.name);
|
||||||
}
|
}
|
||||||
if let Some(grp) = a.group {
|
if let Some(grp) = a.group {
|
||||||
let ag = self.groups.entry(grp).or_insert(ArgGroup::with_name(grp));
|
let ag = self.groups.entry(grp).or_insert_with(|| ArgGroup::with_name(grp));
|
||||||
ag.args.push(a.name);
|
ag.args.push(a.name);
|
||||||
}
|
}
|
||||||
if let Some(s) = a.short {
|
if let Some(s) = a.short {
|
||||||
|
@ -288,7 +288,7 @@ impl<'a, 'b> Parser<'a, 'b> where 'a: 'b {
|
||||||
c_opt.push(f);
|
c_opt.push(f);
|
||||||
}
|
}
|
||||||
let mut tmp_p = vec![];
|
let mut tmp_p = vec![];
|
||||||
for p in c_pos.iter() {
|
for p in &c_pos {
|
||||||
if let Some(p) = self.positionals.values().filter(|pos| &pos.name == p).next() {
|
if let Some(p) = self.positionals.values().filter(|pos| &pos.name == p).next() {
|
||||||
if let Some(ref rl) = p.requires {
|
if let Some(ref rl) = p.requires {
|
||||||
for r in rl {
|
for r in rl {
|
||||||
|
@ -426,11 +426,11 @@ impl<'a, 'b> Parser<'a, 'b> where 'a: 'b {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn propogate_globals(&mut self) {
|
pub fn propogate_globals(&mut self) {
|
||||||
for sc in self.subcommands.iter_mut() {
|
for sc in &mut self.subcommands {
|
||||||
// We have to create a new scope in order to tell rustc the borrow of `sc` is
|
// We have to create a new scope in order to tell rustc the borrow of `sc` is
|
||||||
// done and to recursively call this method
|
// done and to recursively call this method
|
||||||
{
|
{
|
||||||
for a in self.global_args.iter() {
|
for a in &self.global_args {
|
||||||
sc.0.add_arg(a);
|
sc.0.add_arg(a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -621,7 +621,7 @@ impl<'a, 'b> Parser<'a, 'b> where 'a: 'b {
|
||||||
}
|
}
|
||||||
let reqs = self.get_required_from(&hs, Some(matcher));
|
let reqs = self.get_required_from(&hs, Some(matcher));
|
||||||
|
|
||||||
for s in reqs.iter() {
|
for s in &reqs {
|
||||||
write!(&mut mid_string, " {}", s).expect(INTERNAL_ERROR_MSG);
|
write!(&mut mid_string, " {}", s).expect(INTERNAL_ERROR_MSG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1281,7 +1281,7 @@ impl<'a, 'b> Parser<'a, 'b> where 'a: 'b {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn validate_required(&self, matcher: &ArgMatcher) -> ClapResult<()> {
|
fn validate_required(&self, matcher: &ArgMatcher) -> ClapResult<()> {
|
||||||
'outer: for name in self.required.iter() {
|
'outer: for name in &self.required {
|
||||||
if matcher.contains(name) {
|
if matcher.contains(name) {
|
||||||
continue 'outer;
|
continue 'outer;
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,26 +92,27 @@ impl<'a> ArgMatches<'a> {
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
pub fn new() -> Self { ArgMatches { ..Default::default() } }
|
pub fn new() -> Self { ArgMatches { ..Default::default() } }
|
||||||
|
|
||||||
/// Gets the value of a specific option or positional argument (i.e. an argument that takes
|
|
||||||
/// an additional value at runtime). If the option wasn't present at runtime
|
|
||||||
/// it returns `None`.
|
|
||||||
///
|
|
||||||
/// *NOTE:* If getting a value for an option or positional argument that allows multiples,
|
|
||||||
/// prefer `values_of()` as `value_of()` will only return the _*first*_ value.
|
|
||||||
///
|
|
||||||
/// # Examples
|
|
||||||
///
|
|
||||||
/// ```no_run
|
|
||||||
/// # use clap::{App, Arg};
|
|
||||||
/// # let matches = App::new("myapp")
|
|
||||||
/// # .arg(Arg::with_name("output")
|
|
||||||
/// # .takes_value(true))
|
|
||||||
/// # .get_matches();
|
|
||||||
/// if let Some(o) = matches.value_of("output") {
|
|
||||||
/// println!("Value for output: {}", o);
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
pub fn value_of<S: AsRef<str>>(&self, name: S) -> Option<&str> {
|
pub fn value_of<S: AsRef<str>>(&self, name: S) -> Option<&str> {
|
||||||
|
/*!
|
||||||
|
Gets the value of a specific option or positional argument (i.e. an argument that takes
|
||||||
|
an additional value at runtime). If the option wasn't present at runtime
|
||||||
|
it returns `None`.
|
||||||
|
|
||||||
|
*NOTE:* If getting a value for an option or positional argument that allows multiples,
|
||||||
|
prefer `values_of()` as `value_of()` will only return the _*first*_ value.
|
||||||
|
|
||||||
|
# Examples
|
||||||
|
|
||||||
|
```no_run
|
||||||
|
# use clap::{App, Arg};
|
||||||
|
let m = App::new("myapp")
|
||||||
|
.arg(Arg::with_name("output")
|
||||||
|
.takes_value(true))
|
||||||
|
.get_matches_from(vec!["myapp", "something"]);
|
||||||
|
|
||||||
|
assert_eq!(m.value_of("output"), Some("something"));
|
||||||
|
```
|
||||||
|
*/
|
||||||
if let Some(ref arg) = self.args.get(name.as_ref()) {
|
if let Some(ref arg) = self.args.get(name.as_ref()) {
|
||||||
if let Some(v) = arg.vals.values().nth(0) {
|
if let Some(v) = arg.vals.values().nth(0) {
|
||||||
return Some(v.to_str().expect(INVALID_UTF8));
|
return Some(v.to_str().expect(INVALID_UTF8));
|
||||||
|
@ -121,6 +122,27 @@ impl<'a> ArgMatches<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn lossy_value_of<S: AsRef<str>>(&'a self, name: S) -> Option<Cow<'a, str>> {
|
pub fn lossy_value_of<S: AsRef<str>>(&'a self, name: S) -> Option<Cow<'a, str>> {
|
||||||
|
/*!
|
||||||
|
Gets the lossy value of a specific argument If the option wasn't present at runtime
|
||||||
|
it returns `None`. A lossy value is one which contains invalid UTF-8 code points, those
|
||||||
|
invalid points will be replaced with `\u{FFFD}`
|
||||||
|
|
||||||
|
*NOTE:* If getting a value for an option or positional argument that allows multiples,
|
||||||
|
prefer `lossy_values_of()` as `lossy_value_of()` will only return the _*first*_ value.
|
||||||
|
|
||||||
|
# Examples
|
||||||
|
|
||||||
|
```no_run
|
||||||
|
# use clap::{App, Arg};
|
||||||
|
use std::ffi::OsString;
|
||||||
|
let m = App::new("utf8")
|
||||||
|
.arg(Arg::from_usage("<arg> 'some arg'"))
|
||||||
|
.get_matches_from(vec![OsString::from("myprog"),
|
||||||
|
// "Hi {0xe9}!"
|
||||||
|
OsString::from_vec(vec![b'H', b'i', b' ', 0xe9, b'!'])]);
|
||||||
|
assert_eq!(&*m.lossy_value_of("arg").unwrap(), "Hi \u{FFFD}!");
|
||||||
|
```
|
||||||
|
*/
|
||||||
if let Some(arg) = self.args.get(name.as_ref()) {
|
if let Some(arg) = self.args.get(name.as_ref()) {
|
||||||
if let Some(v) = arg.vals.values().nth(0) {
|
if let Some(v) = arg.vals.values().nth(0) {
|
||||||
return Some(v.to_string_lossy());
|
return Some(v.to_string_lossy());
|
||||||
|
@ -130,7 +152,35 @@ impl<'a> ArgMatches<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn os_value_of<S: AsRef<str>>(&self, name: S) -> Option<&OsStr> {
|
pub fn os_value_of<S: AsRef<str>>(&self, name: S) -> Option<&OsStr> {
|
||||||
self.args.get(name.as_ref()).map(|arg| arg.vals.values().nth(0).map(|v| v.as_os_str())).unwrap_or(None)
|
/*!
|
||||||
|
Gets the OS version of a string value of a specific argument If the option wasn't present at
|
||||||
|
runtime it returns `None`. An OS value on Unix-like systems is any series of bytes, regardless
|
||||||
|
of whether or not they contain valid UTF-8 code points. Since `String`s in Rust are
|
||||||
|
garunteed to be valid UTF-8, a valid filename as an argument value on Linux (for example) may
|
||||||
|
contain invalid UTF-8 code points. This would cause a `panic!` or only the abiltiy to get a
|
||||||
|
lossy version of the file name (i.e. one where the invalid code points were replaced with
|
||||||
|
`\u{FFFD}`). This method returns an `OsString` which allows one to represent those strings
|
||||||
|
which rightfully contain invalid UTF-8.
|
||||||
|
|
||||||
|
*NOTE:* If getting a value for an option or positional argument that allows multiples,
|
||||||
|
prefer `os_values_of()` as `os_value_of()` will only return the _*first*_ value.
|
||||||
|
|
||||||
|
# Examples
|
||||||
|
|
||||||
|
```no_run
|
||||||
|
# use clap::{App, Arg};
|
||||||
|
use std::ffi::OsString;
|
||||||
|
use std::os::unix::ffi::OsStrExt;
|
||||||
|
|
||||||
|
let m = App::new("utf8")
|
||||||
|
.arg(Arg::from_usage("<arg> 'some arg'"))
|
||||||
|
.get_matches_from(vec![OsString::from("myprog"),
|
||||||
|
// "Hi {0xe9}!"
|
||||||
|
OsString::from_vec(vec![b'H', b'i', b' ', 0xe9, b'!'])]);
|
||||||
|
assert_eq!(&*m.os_value_of("arg").unwrap().as_bytes(), &[b'H', b'i', b' ', 0xe9, b'!']);
|
||||||
|
```
|
||||||
|
*/
|
||||||
|
self.args.get(name.as_ref()).map_or(None, |arg| arg.vals.values().nth(0).map(|v| v.as_os_str()))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Gets the values of a specific option or positional argument in a vector (i.e. an argument
|
/// Gets the values of a specific option or positional argument in a vector (i.e. an argument
|
||||||
|
@ -154,14 +204,35 @@ impl<'a> ArgMatches<'a> {
|
||||||
/// ```
|
/// ```
|
||||||
pub fn values_of<S: AsRef<str>>(&'a self, name: S) -> Option<Values<'a>> {
|
pub fn values_of<S: AsRef<str>>(&'a self, name: S) -> Option<Values<'a>> {
|
||||||
if let Some(ref arg) = self.args.get(name.as_ref()) {
|
if let Some(ref arg) = self.args.get(name.as_ref()) {
|
||||||
fn to_str_slice<'a>(o: &'a OsString) -> &'a str { o.to_str().expect(INVALID_UTF8) }
|
fn to_str_slice(o: &OsString) -> &str { o.to_str().expect(INVALID_UTF8) }
|
||||||
let to_str_slice: fn(&'a OsString) -> &'a str = to_str_slice; // coerce to fn pointer
|
let to_str_slice: fn(&OsString) -> &str = to_str_slice; // coerce to fn pointer
|
||||||
return Some(Values { iter: arg.vals.values().map(to_str_slice) });
|
return Some(Values { iter: arg.vals.values().map(to_str_slice) });
|
||||||
}
|
}
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn lossy_values_of<S: AsRef<str>>(&'a self, name: S) -> Option<Vec<String>> {
|
pub fn lossy_values_of<S: AsRef<str>>(&'a self, name: S) -> Option<Vec<String>> {
|
||||||
|
/*!
|
||||||
|
Gets the lossy values of a specific argument If the option wasn't present at runtime
|
||||||
|
it returns `None`. A lossy value is one which contains invalid UTF-8 code points, those
|
||||||
|
invalid points will be replaced with `\u{FFFD}`
|
||||||
|
|
||||||
|
# Examples
|
||||||
|
|
||||||
|
```no_run
|
||||||
|
# use clap::{App, Arg};
|
||||||
|
use std::ffi::OsString;
|
||||||
|
let m = App::new("utf8")
|
||||||
|
.arg(Arg::from_usage("<arg> 'some arg'"))
|
||||||
|
.get_matches_from(vec![OsString::from("myprog"),
|
||||||
|
// "Hi {0xe9}!"
|
||||||
|
OsString::from_vec(vec![b'H', b'i', b' ', 0xe9, b'!'])]);
|
||||||
|
let itr = m.lossy_values_of("arg").unwrap();
|
||||||
|
assert_eq!(&*itr.next().unwrap(), "Hi");
|
||||||
|
assert_eq!(&*itr.next().unwrap(), "\u{FFFD}!");
|
||||||
|
assert_eq!(itr.next(), None);
|
||||||
|
```
|
||||||
|
*/
|
||||||
if let Some(ref arg) = self.args.get(name.as_ref()) {
|
if let Some(ref arg) = self.args.get(name.as_ref()) {
|
||||||
return Some(arg.vals.values()
|
return Some(arg.vals.values()
|
||||||
.map(|v| v.to_string_lossy().into_owned())
|
.map(|v| v.to_string_lossy().into_owned())
|
||||||
|
@ -171,7 +242,37 @@ impl<'a> ArgMatches<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn os_values_of<S: AsRef<str>>(&'a self, name: S) -> Option<OsValues<'a>> {
|
pub fn os_values_of<S: AsRef<str>>(&'a self, name: S) -> Option<OsValues<'a>> {
|
||||||
fn to_str_slice<'a>(o: &'a OsString) -> &'a OsStr { &*o }
|
/*!
|
||||||
|
Gets the OS version of a string value of a specific argument If the option wasn't present at
|
||||||
|
runtime it returns `None`. An OS value on Unix-like systems is any series of bytes, regardless
|
||||||
|
of whether or not they contain valid UTF-8 code points. Since `String`s in Rust are
|
||||||
|
garunteed to be valid UTF-8, a valid filename as an argument value on Linux (for example) may
|
||||||
|
contain invalid UTF-8 code points. This would cause a `panic!` or only the abiltiy to get a
|
||||||
|
lossy version of the file name (i.e. one where the invalid code points were replaced with
|
||||||
|
`\u{FFFD}`). This method returns an `OsString` which allows one to represent those strings
|
||||||
|
which rightfully contain invalid UTF-8.
|
||||||
|
|
||||||
|
# Examples
|
||||||
|
|
||||||
|
```no_run
|
||||||
|
# use clap::{App, Arg};
|
||||||
|
use std::ffi::OsString;
|
||||||
|
|
||||||
|
let m = App::new("utf8")
|
||||||
|
.arg(Arg::from_usage("<arg> 'some arg'"))
|
||||||
|
.get_matches_from(vec![OsString::from("myprog"),
|
||||||
|
// "Hi"
|
||||||
|
OsString::from_vec(vec![b'H', b'i']),
|
||||||
|
// "{0xe9}!"
|
||||||
|
OsString::from_vec(vec![0xe9, b'!'])]);
|
||||||
|
|
||||||
|
let itr = m.os_values_of("arg").unwrap();
|
||||||
|
assert_eq!(itr.next(), Some(&*OsString::from("Hi")));
|
||||||
|
assert_eq!(itr.next(), Some(&*OsString::from_vec(vec![0xe9, b'!'])));
|
||||||
|
assert_eq!(itr.next(), None);
|
||||||
|
```
|
||||||
|
*/
|
||||||
|
fn to_str_slice(o: &OsString) -> &OsStr { &*o }
|
||||||
let to_str_slice: fn(&'a OsString) -> &'a OsStr = to_str_slice; // coerce to fn pointer
|
let to_str_slice: fn(&'a OsString) -> &'a OsStr = to_str_slice; // coerce to fn pointer
|
||||||
if let Some(ref arg) = self.args.get(name.as_ref()) {
|
if let Some(ref arg) = self.args.get(name.as_ref()) {
|
||||||
return Some(OsValues { iter: arg.vals.values().map(to_str_slice) });
|
return Some(OsValues { iter: arg.vals.values().map(to_str_slice) });
|
||||||
|
@ -219,7 +320,7 @@ impl<'a> ArgMatches<'a> {
|
||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
pub fn occurrences_of<S: AsRef<str>>(&self, name: S) -> u8 {
|
pub fn occurrences_of<S: AsRef<str>>(&self, name: S) -> u8 {
|
||||||
self.args.get(name.as_ref()).map(|a| a.occurs).unwrap_or(0)
|
self.args.get(name.as_ref()).map_or(0, |a| a.occurs)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the `ArgMatches` for a particular subcommand or None if the subcommand wasn't
|
/// Returns the `ArgMatches` for a particular subcommand or None if the subcommand wasn't
|
||||||
|
@ -279,7 +380,7 @@ impl<'a> ArgMatches<'a> {
|
||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
pub fn subcommand(&self) -> (&str, Option<&ArgMatches<'a>>) {
|
pub fn subcommand(&self) -> (&str, Option<&ArgMatches<'a>>) {
|
||||||
self.subcommand.as_ref().map(|sc| (&sc.name[..], Some(&sc.matches))).unwrap_or(("", None))
|
self.subcommand.as_ref().map_or(("",None), |sc| (&sc.name[..], Some(&sc.matches)))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns a string slice of the usage statement for the `App` (or `SubCommand`)
|
/// Returns a string slice of the usage statement for the `App` (or `SubCommand`)
|
||||||
|
@ -294,7 +395,7 @@ impl<'a> ArgMatches<'a> {
|
||||||
/// println!("{}",app_matches.usage());
|
/// println!("{}",app_matches.usage());
|
||||||
/// ```
|
/// ```
|
||||||
pub fn usage(&self) -> &str {
|
pub fn usage(&self) -> &str {
|
||||||
self.usage.as_ref().map(|u| &u[..]).unwrap_or("")
|
self.usage.as_ref().map_or("", |u| &u[..])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -334,19 +435,12 @@ impl<'a, V> Iterator for Iter<'a, V> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn next(&mut self) -> Option<&'a V> {
|
fn next(&mut self) -> Option<&'a V> {
|
||||||
while self.front < self.back {
|
while self.front < self.back {
|
||||||
match self.iter.next() {
|
if let Some(elem) = self.iter.next() {
|
||||||
Some(elem) => {
|
if let Some(x) = elem.as_ref() {
|
||||||
match elem.as_ref() {
|
|
||||||
Some(x) => {
|
|
||||||
// let index = self.front;
|
|
||||||
self.front += 1;
|
self.front += 1;
|
||||||
return Some(x);
|
return Some(x);
|
||||||
},
|
|
||||||
None => {},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => ()
|
|
||||||
}
|
|
||||||
self.front += 1;
|
self.front += 1;
|
||||||
}
|
}
|
||||||
None
|
None
|
||||||
|
@ -362,18 +456,12 @@ impl<'a, V> DoubleEndedIterator for Iter<'a, V> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn next_back(&mut self) -> Option<&'a V> {
|
fn next_back(&mut self) -> Option<&'a V> {
|
||||||
while self.front < self.back {
|
while self.front < self.back {
|
||||||
match self.iter.next_back() {
|
if let Some(elem) = self.iter.next_back() {
|
||||||
Some(elem) => {
|
if let Some(x) = elem.as_ref() {
|
||||||
match elem.as_ref() {
|
|
||||||
Some(x) => {
|
|
||||||
self.back -= 1;
|
self.back -= 1;
|
||||||
return Some(x);
|
return Some(x);
|
||||||
},
|
|
||||||
None => {},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => ()
|
|
||||||
}
|
|
||||||
self.back -= 1;
|
self.back -= 1;
|
||||||
}
|
}
|
||||||
None
|
None
|
||||||
|
|
|
@ -648,20 +648,17 @@
|
||||||
#![cfg_attr(feature = "lints", deny(warnings))]
|
#![cfg_attr(feature = "lints", deny(warnings))]
|
||||||
#![cfg_attr(not(any(feature = "lints", feature = "nightly")), deny(unstable_features))]
|
#![cfg_attr(not(any(feature = "lints", feature = "nightly")), deny(unstable_features))]
|
||||||
#![deny(
|
#![deny(
|
||||||
// missing_docs,
|
missing_docs,
|
||||||
missing_debug_implementations,
|
missing_debug_implementations,
|
||||||
missing_copy_implementations,
|
missing_copy_implementations,
|
||||||
trivial_casts,
|
trivial_casts,
|
||||||
trivial_numeric_casts,
|
trivial_numeric_casts,
|
||||||
// unsafe_code,
|
|
||||||
unused_import_braces,
|
unused_import_braces,
|
||||||
unused_qualifications)]
|
unused_qualifications)]
|
||||||
// clippy false positives, or ones we're ok with...
|
// clippy false positives, or ones we're ok with...
|
||||||
#![cfg_attr(feature = "lints", allow(explicit_iter_loop))]
|
|
||||||
#![cfg_attr(feature = "lints", allow(should_implement_trait))]
|
|
||||||
#![cfg_attr(feature = "lints", allow(cyclomatic_complexity))]
|
#![cfg_attr(feature = "lints", allow(cyclomatic_complexity))]
|
||||||
// Only while bitflats uses "_first" inside it's macros
|
// Only while bitflats uses "_first" inside it's macros
|
||||||
#![cfg_attr(feature = "lints", allow(used_underscore_binding))]
|
#![cfg_attr(feature = "lints", allow(used_underscore_binding))]
|
||||||
|
|
||||||
#[cfg(feature = "suggestions")]
|
#[cfg(feature = "suggestions")]
|
||||||
extern crate strsim;
|
extern crate strsim;
|
||||||
|
|
|
@ -13,13 +13,11 @@ pub trait OsStrExt2 {
|
||||||
|
|
||||||
impl OsStrExt2 for OsStr {
|
impl OsStrExt2 for OsStr {
|
||||||
fn starts_with(&self, s: &[u8]) -> bool {
|
fn starts_with(&self, s: &[u8]) -> bool {
|
||||||
let mut i = 0;
|
|
||||||
let sab = self.as_bytes();
|
let sab = self.as_bytes();
|
||||||
for b in s {
|
for (i, b) in s.iter().enumerate() {
|
||||||
if *b != sab[i] { return false; }
|
if *b != sab[i] { return false; }
|
||||||
i += 1;
|
|
||||||
}
|
}
|
||||||
return true;
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_empty(&self) -> bool {
|
fn is_empty(&self) -> bool {
|
||||||
|
@ -34,19 +32,15 @@ impl OsStrExt2 for OsStr {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn split_at_byte(&self, byte: u8) -> (&OsStr, &OsStr) {
|
fn split_at_byte(&self, byte: u8) -> (&OsStr, &OsStr) {
|
||||||
let mut i = 0;
|
for (i, b) in self.as_bytes().iter().enumerate() {
|
||||||
for b in self.as_bytes() {
|
|
||||||
if b == &byte { return (OsStr::from_bytes(&self.as_bytes()[..i]), OsStr::from_bytes(&self.as_bytes()[i+1..])); }
|
if b == &byte { return (OsStr::from_bytes(&self.as_bytes()[..i]), OsStr::from_bytes(&self.as_bytes()[i+1..])); }
|
||||||
i += 1;
|
|
||||||
}
|
}
|
||||||
(&*self, OsStr::from_bytes(&self.as_bytes()[self.len()..self.len()]))
|
(&*self, OsStr::from_bytes(&self.as_bytes()[self.len()..self.len()]))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn trim_left_matches(&self, byte: u8) -> &OsStr {
|
fn trim_left_matches(&self, byte: u8) -> &OsStr {
|
||||||
let mut i = 0;
|
for (i, b) in self.as_bytes().iter().enumerate() {
|
||||||
for b in self.as_bytes() {
|
|
||||||
if b != &byte { return OsStr::from_bytes(&self.as_bytes()[i..]); }
|
if b != &byte { return OsStr::from_bytes(&self.as_bytes()[i..]); }
|
||||||
i += 1;
|
|
||||||
}
|
}
|
||||||
&*self
|
&*self
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue