mirror of
https://github.com/elkowar/eww.git
synced 2024-10-05 23:47:44 +03:00
Yeet box patterns
This commit is contained in:
parent
607f4411d3
commit
82a429a569
@ -1,13 +1,13 @@
|
|||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
fn main() {
|
fn main() {
|
||||||
let output = Command::new("git").args(&["rev-parse", "HEAD"]).output();
|
let output = Command::new("git").args(["rev-parse", "HEAD"]).output();
|
||||||
if let Ok(output) = output {
|
if let Ok(output) = output {
|
||||||
if let Ok(hash) = String::from_utf8(output.stdout) {
|
if let Ok(hash) = String::from_utf8(output.stdout) {
|
||||||
println!("cargo:rustc-env=GIT_HASH={}", hash);
|
println!("cargo:rustc-env=GIT_HASH={}", hash);
|
||||||
println!("cargo:rustc-env=CARGO_PKG_VERSION={} {}", env!("CARGO_PKG_VERSION"), hash);
|
println!("cargo:rustc-env=CARGO_PKG_VERSION={} {}", env!("CARGO_PKG_VERSION"), hash);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let output = Command::new("git").args(&["show", "-s", "--format=%ci"]).output();
|
let output = Command::new("git").args(["show", "-s", "--format=%ci"]).output();
|
||||||
if let Ok(output) = output {
|
if let Ok(output) = output {
|
||||||
if let Ok(date) = String::from_utf8(output.stdout) {
|
if let Ok(date) = String::from_utf8(output.stdout) {
|
||||||
println!("cargo:rustc-env=GIT_COMMIT_DATE={}", date);
|
println!("cargo:rustc-env=GIT_COMMIT_DATE={}", date);
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#![feature(trace_macros)]
|
#![feature(trace_macros)]
|
||||||
#![feature(extract_if)]
|
#![feature(extract_if)]
|
||||||
#![feature(box_patterns)]
|
|
||||||
#![feature(slice_concat_trait)]
|
#![feature(slice_concat_trait)]
|
||||||
#![feature(try_blocks)]
|
#![feature(try_blocks)]
|
||||||
#![feature(hash_extract_if)]
|
#![feature(hash_extract_if)]
|
||||||
|
@ -55,7 +55,7 @@ pub enum EvalError {
|
|||||||
JaqError(String),
|
JaqError(String),
|
||||||
|
|
||||||
#[error(transparent)]
|
#[error(transparent)]
|
||||||
JaqParseError(JaqParseError),
|
JaqParseError(Box<JaqParseError>),
|
||||||
|
|
||||||
#[error("Error parsing date: {0}")]
|
#[error("Error parsing date: {0}")]
|
||||||
ChronoError(String),
|
ChronoError(String),
|
||||||
@ -98,13 +98,13 @@ impl SimplExpr {
|
|||||||
pub fn try_map_var_refs<E, F: Fn(Span, VarName) -> Result<SimplExpr, E> + Copy>(self, f: F) -> Result<Self, E> {
|
pub fn try_map_var_refs<E, F: Fn(Span, VarName) -> Result<SimplExpr, E> + Copy>(self, f: F) -> Result<Self, E> {
|
||||||
use SimplExpr::*;
|
use SimplExpr::*;
|
||||||
Ok(match self {
|
Ok(match self {
|
||||||
BinOp(span, box a, op, box b) => BinOp(span, Box::new(a.try_map_var_refs(f)?), op, Box::new(b.try_map_var_refs(f)?)),
|
BinOp(span, a, op, b) => BinOp(span, Box::new(a.try_map_var_refs(f)?), op, Box::new(b.try_map_var_refs(f)?)),
|
||||||
Concat(span, elems) => Concat(span, elems.into_iter().map(|x| x.try_map_var_refs(f)).collect::<Result<_, _>>()?),
|
Concat(span, elems) => Concat(span, elems.into_iter().map(|x| x.try_map_var_refs(f)).collect::<Result<_, _>>()?),
|
||||||
UnaryOp(span, op, box a) => UnaryOp(span, op, Box::new(a.try_map_var_refs(f)?)),
|
UnaryOp(span, op, a) => UnaryOp(span, op, Box::new(a.try_map_var_refs(f)?)),
|
||||||
IfElse(span, box a, box b, box c) => {
|
IfElse(span, a, b, c) => {
|
||||||
IfElse(span, Box::new(a.try_map_var_refs(f)?), Box::new(b.try_map_var_refs(f)?), Box::new(c.try_map_var_refs(f)?))
|
IfElse(span, Box::new(a.try_map_var_refs(f)?), Box::new(b.try_map_var_refs(f)?), Box::new(c.try_map_var_refs(f)?))
|
||||||
}
|
}
|
||||||
JsonAccess(span, safe, box a, box b) => {
|
JsonAccess(span, safe, a, b) => {
|
||||||
JsonAccess(span, safe, Box::new(a.try_map_var_refs(f)?), Box::new(b.try_map_var_refs(f)?))
|
JsonAccess(span, safe, Box::new(a.try_map_var_refs(f)?), Box::new(b.try_map_var_refs(f)?))
|
||||||
}
|
}
|
||||||
FunctionCall(span, name, args) => {
|
FunctionCall(span, name, args) => {
|
||||||
@ -154,13 +154,13 @@ impl SimplExpr {
|
|||||||
Literal(..) => Vec::new(),
|
Literal(..) => Vec::new(),
|
||||||
VarRef(span, name) => vec![(*span, name)],
|
VarRef(span, name) => vec![(*span, name)],
|
||||||
Concat(_, elems) => elems.iter().flat_map(|x| x.var_refs_with_span().into_iter()).collect(),
|
Concat(_, elems) => elems.iter().flat_map(|x| x.var_refs_with_span().into_iter()).collect(),
|
||||||
BinOp(_, box a, _, box b) | JsonAccess(_, _, box a, box b) => {
|
BinOp(_, a, _, b) | JsonAccess(_, _, a, b) => {
|
||||||
let mut refs = a.var_refs_with_span();
|
let mut refs = a.var_refs_with_span();
|
||||||
refs.extend(b.var_refs_with_span().iter());
|
refs.extend(b.var_refs_with_span().iter());
|
||||||
refs
|
refs
|
||||||
}
|
}
|
||||||
UnaryOp(_, _, box x) => x.var_refs_with_span(),
|
UnaryOp(_, _, x) => x.var_refs_with_span(),
|
||||||
IfElse(_, box a, box b, box c) => {
|
IfElse(_, a, b, c) => {
|
||||||
let mut refs = a.var_refs_with_span();
|
let mut refs = a.var_refs_with_span();
|
||||||
refs.extend(b.var_refs_with_span().iter());
|
refs.extend(b.var_refs_with_span().iter());
|
||||||
refs.extend(c.var_refs_with_span().iter());
|
refs.extend(c.var_refs_with_span().iter());
|
||||||
@ -463,7 +463,7 @@ fn prepare_jaq_filter(code: String) -> Result<Arc<jaq_core::Filter>, EvalError>
|
|||||||
let (filter, mut errors) = jaq_core::parse::parse(&code, jaq_core::parse::main());
|
let (filter, mut errors) = jaq_core::parse::parse(&code, jaq_core::parse::main());
|
||||||
let filter = match filter {
|
let filter = match filter {
|
||||||
Some(x) => x,
|
Some(x) => x,
|
||||||
None => return Err(EvalError::JaqParseError(JaqParseError(errors.pop()))),
|
None => return Err(EvalError::JaqParseError(Box::new(JaqParseError(errors.pop())))),
|
||||||
};
|
};
|
||||||
let mut defs = jaq_core::Definitions::core();
|
let mut defs = jaq_core::Definitions::core();
|
||||||
for def in jaq_std::std() {
|
for def in jaq_std::std() {
|
||||||
@ -473,7 +473,7 @@ fn prepare_jaq_filter(code: String) -> Result<Arc<jaq_core::Filter>, EvalError>
|
|||||||
let filter = defs.finish(filter, Vec::new(), &mut errors);
|
let filter = defs.finish(filter, Vec::new(), &mut errors);
|
||||||
|
|
||||||
if let Some(error) = errors.pop() {
|
if let Some(error) = errors.pop() {
|
||||||
return Err(EvalError::JaqParseError(JaqParseError(Some(error))));
|
return Err(EvalError::JaqParseError(Box::new(JaqParseError(Some(error)))));
|
||||||
}
|
}
|
||||||
Ok(Arc::new(filter))
|
Ok(Arc::new(filter))
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
#![feature(box_patterns)]
|
|
||||||
#![feature(pattern)]
|
#![feature(pattern)]
|
||||||
#![feature(try_blocks)]
|
#![feature(try_blocks)]
|
||||||
#![feature(unwrap_infallible)]
|
#![feature(unwrap_infallible)]
|
||||||
|
@ -199,22 +199,26 @@ impl ToDiagnostic for simplexpr::eval::EvalError {
|
|||||||
notes.push(format!("Hint: If you meant to use the literal value \"{}\", surround the value in quotes", name));
|
notes.push(format!("Hint: If you meant to use the literal value \"{}\", surround the value in quotes", name));
|
||||||
gen_diagnostic!(self).with_notes(notes)
|
gen_diagnostic!(self).with_notes(notes)
|
||||||
}
|
}
|
||||||
EvalError::Spanned(span, box EvalError::JaqParseError(simplexpr::eval::JaqParseError(Some(err)))) => {
|
EvalError::Spanned(span, err) => {
|
||||||
let span = span.new_relative(err.span().start, err.span().end).shifted(1);
|
if let EvalError::JaqParseError(err) = err.as_ref() {
|
||||||
let mut diag = gen_diagnostic!(self, span);
|
if let Some(ref err) = err.as_ref().0 {
|
||||||
|
let span = span.new_relative(err.span().start, err.span().end).shifted(1);
|
||||||
|
let mut diag = gen_diagnostic!(self, span);
|
||||||
|
|
||||||
if let Some(label) = err.label() {
|
if let Some(label) = err.label() {
|
||||||
diag = diag.with_label(span_to_secondary_label(span).with_message(label));
|
diag = diag.with_label(span_to_secondary_label(span).with_message(label));
|
||||||
}
|
}
|
||||||
|
|
||||||
let expected: Vec<_> = err.expected().filter_map(|x| x.clone()).sorted().collect();
|
let expected: Vec<_> = err.expected().filter_map(|x| x.clone()).sorted().collect();
|
||||||
if !expected.is_empty() {
|
if !expected.is_empty() {
|
||||||
let label = format!("Expected one of {} here", expected.join(", "));
|
let label = format!("Expected one of {} here", expected.join(", "));
|
||||||
diag = diag.with_label(span_to_primary_label(span).with_message(label));
|
diag = diag.with_label(span_to_primary_label(span).with_message(label));
|
||||||
|
}
|
||||||
|
return diag;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
diag
|
return err.as_ref().to_diagnostic().with_label(span_to_primary_label(*span));
|
||||||
}
|
}
|
||||||
EvalError::Spanned(span, error) => error.as_ref().to_diagnostic().with_label(span_to_primary_label(*span)),
|
|
||||||
_ => gen_diagnostic!(self, self.span()),
|
_ => gen_diagnostic!(self, self.span()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#![allow(clippy::comparison_chain)]
|
#![allow(clippy::comparison_chain)]
|
||||||
#![feature(try_blocks, box_patterns)]
|
#![feature(try_blocks)]
|
||||||
|
|
||||||
pub mod ast_error;
|
pub mod ast_error;
|
||||||
pub mod config;
|
pub mod config;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
[toolchain]
|
[toolchain]
|
||||||
channel = "nightly-2024-02-16"
|
channel = "nightly-2024-02-16"
|
||||||
|
# channel = "1.76.0"
|
||||||
components = [ "rust-src" ]
|
components = [ "rust-src" ]
|
||||||
profile = "default"
|
profile = "default"
|
||||||
|
Loading…
Reference in New Issue
Block a user