Change MSRV to 1.46.0 (#968)
This commit is contained in:
parent
629c75ff04
commit
09af9bb5e5
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -1,7 +1,5 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "aho-corasick"
|
||||
version = "0.7.18"
|
||||
|
@ -11,7 +11,6 @@ edition = "2018"
|
||||
autotests = false
|
||||
categories = ["command-line-utilities", "development-tools"]
|
||||
keywords = ["command-line", "task", "runner", "development", "utility"]
|
||||
resolver = "2"
|
||||
|
||||
[workspace]
|
||||
members = [".", "bin/ref-type"]
|
||||
|
@ -1661,6 +1661,10 @@ https://github.com/casey/janus[Janus] is a tool that collects and analyzes justf
|
||||
|
||||
Before merging a particularly large or gruesome change, Janus should be run to make sure that nothing breaks. Don't worry about running Janus yourself, Casey will happily run it for you on changes that need it.
|
||||
|
||||
=== Minimum Supported Rust Version
|
||||
|
||||
The minimum supported Rust version, or MSRV, can be found in link:rust-toolchain[].
|
||||
|
||||
== Frequently Asked Questions
|
||||
|
||||
=== What are the idiosyncrasies of Make that Just avoids?
|
||||
|
@ -1 +1 @@
|
||||
1.52.1
|
||||
1.46.0
|
||||
|
@ -466,10 +466,7 @@ impl Config {
|
||||
overrides,
|
||||
}
|
||||
} else if let Some(values) = matches.values_of_os(cmd::COMMAND) {
|
||||
let mut arguments = values
|
||||
.into_iter()
|
||||
.map(OsStr::to_owned)
|
||||
.collect::<Vec<OsString>>();
|
||||
let mut arguments = values.map(OsStr::to_owned).collect::<Vec<OsString>>();
|
||||
Subcommand::Command {
|
||||
binary: arguments.remove(0),
|
||||
arguments,
|
||||
|
13
src/lexer.rs
13
src/lexer.rs
@ -257,12 +257,7 @@ impl<'src> Lexer<'src> {
|
||||
|
||||
/// True if `text` could be an identifier
|
||||
pub(crate) fn is_identifier(text: &str) -> bool {
|
||||
if !text
|
||||
.chars()
|
||||
.next()
|
||||
.map(Self::is_identifier_start)
|
||||
.unwrap_or(false)
|
||||
{
|
||||
if !text.chars().next().map_or(false, Self::is_identifier_start) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -496,11 +491,9 @@ impl<'src> Lexer<'src> {
|
||||
'}' => self.lex_delimiter(BraceR),
|
||||
'+' => self.lex_single(Plus),
|
||||
'#' => self.lex_comment(),
|
||||
' ' => self.lex_whitespace(),
|
||||
' ' | '\t' => self.lex_whitespace(),
|
||||
'`' | '"' | '\'' => self.lex_string(),
|
||||
'\n' => self.lex_eol(),
|
||||
'\r' => self.lex_eol(),
|
||||
'\t' => self.lex_whitespace(),
|
||||
'\n' | '\r' => self.lex_eol(),
|
||||
_ if Self::is_identifier_start(start) => self.lex_identifier(),
|
||||
_ => {
|
||||
self.advance()?;
|
||||
|
31
src/lib.rs
31
src/lib.rs
@ -1,43 +1,14 @@
|
||||
#![deny(clippy::all, clippy::pedantic, clippy::restriction)]
|
||||
#![deny(clippy::all, clippy::pedantic)]
|
||||
#![allow(
|
||||
clippy::blanket_clippy_restriction_lints,
|
||||
clippy::comparison_chain,
|
||||
clippy::create_dir,
|
||||
clippy::default_numeric_fallback,
|
||||
clippy::else_if_without_else,
|
||||
clippy::enum_glob_use,
|
||||
clippy::exhaustive_enums,
|
||||
clippy::exhaustive_structs,
|
||||
clippy::expect_used,
|
||||
clippy::filter_map,
|
||||
clippy::if_not_else,
|
||||
clippy::implicit_return,
|
||||
clippy::indexing_slicing,
|
||||
clippy::integer_arithmetic,
|
||||
clippy::let_underscore_must_use,
|
||||
clippy::map_unwrap_or,
|
||||
clippy::match_same_arms,
|
||||
clippy::missing_docs_in_private_items,
|
||||
clippy::missing_errors_doc,
|
||||
clippy::missing_inline_in_public_items,
|
||||
clippy::needless_lifetimes,
|
||||
clippy::needless_pass_by_value,
|
||||
clippy::non_ascii_literal,
|
||||
clippy::option_if_let_else,
|
||||
clippy::panic,
|
||||
clippy::panic_in_result_fn,
|
||||
clippy::pattern_type_mismatch,
|
||||
clippy::print_stdout,
|
||||
clippy::shadow_unrelated,
|
||||
clippy::string_add,
|
||||
clippy::struct_excessive_bools,
|
||||
clippy::too_many_lines,
|
||||
clippy::unnecessary_wraps,
|
||||
clippy::unreachable,
|
||||
clippy::unwrap_in_result,
|
||||
clippy::unwrap_used,
|
||||
clippy::use_debug,
|
||||
clippy::wildcard_enum_match_arm,
|
||||
clippy::wildcard_imports
|
||||
)]
|
||||
|
||||
|
@ -48,8 +48,7 @@ fn load_from_file(
|
||||
&& config.dotenv_filename.is_none()
|
||||
&& config.dotenv_path.is_none()
|
||||
&& !std::env::var_os("JUST_SUPPRESS_DOTENV_LOAD_WARNING")
|
||||
.map(|val| val.as_os_str().to_str() == Some("1"))
|
||||
.unwrap_or(false)
|
||||
.map_or(false, |val| val.as_os_str().to_str() == Some("1"))
|
||||
{
|
||||
eprintln!(
|
||||
"{}",
|
||||
|
@ -637,7 +637,7 @@ impl<'tokens, 'src> Parser<'tokens, 'src> {
|
||||
Ok(Recipe {
|
||||
parameters: positional.into_iter().chain(variadic).collect(),
|
||||
private: name.lexeme().starts_with('_'),
|
||||
shebang: body.first().map(Line::is_shebang).unwrap_or(false),
|
||||
shebang: body.first().map_or(false, Line::is_shebang),
|
||||
priors,
|
||||
body,
|
||||
dependencies,
|
||||
@ -700,7 +700,7 @@ impl<'tokens, 'src> Parser<'tokens, 'src> {
|
||||
}
|
||||
}
|
||||
|
||||
while lines.last().map(Line::is_empty).unwrap_or(false) {
|
||||
while lines.last().map_or(false, Line::is_empty) {
|
||||
lines.pop();
|
||||
}
|
||||
|
||||
|
@ -75,17 +75,15 @@ impl Positional {
|
||||
|
||||
/// Parse an override from a value of the form `NAME=.*`.
|
||||
fn override_from_value(value: &str) -> Option<(String, String)> {
|
||||
if let Some(equals) = value.find('=') {
|
||||
let (identifier, equals_value) = value.split_at(equals);
|
||||
let equals = value.find('=')?;
|
||||
|
||||
// exclude `=` from value
|
||||
let value = &equals_value[1..];
|
||||
let (identifier, equals_value) = value.split_at(equals);
|
||||
|
||||
if Lexer::is_identifier(identifier) {
|
||||
Some((identifier.to_owned(), value.to_owned()))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
// exclude `=` from value
|
||||
let value = &equals_value[1..];
|
||||
|
||||
if Lexer::is_identifier(identifier) {
|
||||
Some((identifier.to_owned(), value.to_owned()))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
|
@ -212,11 +212,8 @@ impl<'src, D> Recipe<'src, D> {
|
||||
}
|
||||
let mut evaluated = String::new();
|
||||
let mut continued = false;
|
||||
let quiet_command = lines.peek().map(|line| line.is_quiet()).unwrap_or(false);
|
||||
let infallable_command = lines
|
||||
.peek()
|
||||
.map(|line| line.is_infallable())
|
||||
.unwrap_or(false);
|
||||
let quiet_command = lines.peek().map_or(false, |line| line.is_quiet());
|
||||
let infallable_command = lines.peek().map_or(false, |line| line.is_infallable());
|
||||
loop {
|
||||
if lines.peek().is_none() {
|
||||
break;
|
||||
|
@ -36,10 +36,8 @@ impl<'src, 'run> Scope<'src, 'run> {
|
||||
pub(crate) fn value(&self, name: &str) -> Option<&str> {
|
||||
if let Some(binding) = self.bindings.get(name) {
|
||||
Some(binding.value.as_ref())
|
||||
} else if let Some(parent) = self.parent {
|
||||
parent.value(name)
|
||||
} else {
|
||||
None
|
||||
self.parent?.value(name)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -134,10 +134,10 @@ impl Search {
|
||||
}
|
||||
}
|
||||
|
||||
if candidates.len() == 1 {
|
||||
return Ok(candidates.into_iter().next().unwrap());
|
||||
} else if candidates.len() > 1 {
|
||||
return Err(SearchError::MultipleCandidates { candidates });
|
||||
match candidates.len() {
|
||||
0 => {}
|
||||
1 => return Ok(candidates.into_iter().next().unwrap()),
|
||||
_ => return Err(SearchError::MultipleCandidates { candidates }),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -17,9 +17,9 @@ pub(crate) struct Shell<'src> {
|
||||
impl<'src> Display for Setting<'src> {
|
||||
fn fmt(&self, f: &mut Formatter) -> Result<(), fmt::Error> {
|
||||
match self {
|
||||
Setting::DotenvLoad(value) => write!(f, "{}", value),
|
||||
Setting::Export(value) => write!(f, "{}", value),
|
||||
Setting::PositionalArguments(value) => write!(f, "{}", value),
|
||||
Setting::DotenvLoad(value) | Setting::Export(value) | Setting::PositionalArguments(value) => {
|
||||
write!(f, "{}", value)
|
||||
}
|
||||
Setting::Shell(shell) => write!(f, "{}", shell),
|
||||
}
|
||||
}
|
||||
|
@ -33,8 +33,8 @@ impl<'line> Shebang<'line> {
|
||||
fn interpreter_filename(&self) -> &str {
|
||||
self
|
||||
.interpreter
|
||||
.rsplit_once(|c| matches!(c, '/' | '\\'))
|
||||
.map(|(_path, filename)| filename)
|
||||
.split(|c| matches!(c, '/' | '\\'))
|
||||
.last()
|
||||
.unwrap_or(self.interpreter)
|
||||
}
|
||||
|
||||
|
@ -73,9 +73,10 @@ impl Subcommand {
|
||||
Choose { overrides, chooser } => {
|
||||
Self::choose(config, justfile, &search, overrides, chooser.as_deref())?;
|
||||
}
|
||||
Command { overrides, .. } => justfile.run(config, &search, overrides, &[])?,
|
||||
Command { overrides, .. } | Evaluate { overrides, .. } => {
|
||||
justfile.run(config, &search, overrides, &[])?
|
||||
}
|
||||
Dump => Self::dump(ast),
|
||||
Evaluate { overrides, .. } => justfile.run(config, &search, overrides, &[])?,
|
||||
Format => Self::format(config, ast, &search)?,
|
||||
List => Self::list(config, justfile),
|
||||
Run {
|
||||
|
@ -43,11 +43,8 @@ impl<'key, V: Keyed<'key>> Table<'key, V> {
|
||||
}
|
||||
|
||||
pub(crate) fn pop(&mut self) -> Option<V> {
|
||||
if let Some(key) = self.map.keys().next().copied() {
|
||||
self.map.remove(key)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
let key = self.map.keys().next().copied()?;
|
||||
self.map.remove(key)
|
||||
}
|
||||
|
||||
pub(crate) fn remove(&mut self, key: &str) -> Option<V> {
|
||||
|
15
src/thunk.rs
15
src/thunk.rs
@ -33,8 +33,11 @@ impl<'src> Thunk<'src> {
|
||||
name: Name<'src>,
|
||||
mut arguments: Vec<Expression<'src>>,
|
||||
) -> CompileResult<'src, Thunk<'src>> {
|
||||
if let Some(function) = crate::function::TABLE.get(&name.lexeme()) {
|
||||
match (function, arguments.len()) {
|
||||
crate::function::TABLE.get(&name.lexeme()).map_or(
|
||||
Err(name.error(CompileErrorKind::UnknownFunction {
|
||||
function: name.lexeme(),
|
||||
})),
|
||||
|function| match (function, arguments.len()) {
|
||||
(Function::Nullary(function), 0) => Ok(Thunk::Nullary {
|
||||
function: *function,
|
||||
name,
|
||||
@ -68,12 +71,8 @@ impl<'src> Thunk<'src> {
|
||||
found: arguments.len(),
|
||||
expected: function.argc(),
|
||||
})),
|
||||
}
|
||||
} else {
|
||||
Err(name.error(CompileErrorKind::UnknownFunction {
|
||||
function: name.lexeme(),
|
||||
}))
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user