mirror of
https://github.com/nushell/nushell.git
synced 2025-08-09 01:54:57 +02:00
Fix ls relative path & command argument path expansion (#757)
* Switch to short-names when the path is a relative_path (a dir) and exit with an error if the path does not exist * Remove debugging print line * Show relative filenames... It does not work yet for ls ../ * Try something else to fix relative paths... it works, but the ../ code part is not very pretty * Add canonicalize check and remove code clones * Fix the canonicalize_with issue pointed out by kubouch. Not sure the prefix_str is what kubouch suggested * Fix the canonicalize_with issue pointed out by kubouch. Not sure the prefix_str is what kubouch suggested * Add single-dot expansion to nu-path * Move value path expansion from parser to eval Fixes #745 * Remove single dot expansion from parser It is not necessary since it will get expanded anyway in the eval. * Fix ls to display globs with relative paths * Use pathdiff crate to get relative paths for ls Co-authored-by: Stefan Stanciulescu <contact@stefanstanciulescu.com>
This commit is contained in:
@ -2,6 +2,7 @@ use std::cmp::Ordering;
|
||||
use std::collections::HashMap;
|
||||
use std::io::Write;
|
||||
|
||||
use nu_path::expand_path_with;
|
||||
use nu_protocol::ast::{Block, Call, Expr, Expression, Operator, Statement};
|
||||
use nu_protocol::engine::{EngineState, Stack};
|
||||
use nu_protocol::{
|
||||
@ -375,14 +376,24 @@ pub fn eval_expression(
|
||||
val: s.clone(),
|
||||
span: expr.span,
|
||||
}),
|
||||
Expr::Filepath(s) => Ok(Value::String {
|
||||
val: s.clone(),
|
||||
span: expr.span,
|
||||
}),
|
||||
Expr::GlobPattern(s) => Ok(Value::String {
|
||||
val: s.clone(),
|
||||
span: expr.span,
|
||||
}),
|
||||
Expr::Filepath(s) => {
|
||||
let cwd = current_dir_str(engine_state, stack)?;
|
||||
let path = expand_path_with(s, cwd);
|
||||
|
||||
Ok(Value::String {
|
||||
val: path.to_string_lossy().to_string(),
|
||||
span: expr.span,
|
||||
})
|
||||
}
|
||||
Expr::GlobPattern(s) => {
|
||||
let cwd = current_dir_str(engine_state, stack)?;
|
||||
let path = expand_path_with(s, cwd);
|
||||
|
||||
Ok(Value::String {
|
||||
val: path.to_string_lossy().to_string(),
|
||||
span: expr.span,
|
||||
})
|
||||
}
|
||||
Expr::Signature(_) => Ok(Value::Nothing { span: expr.span }),
|
||||
Expr::Garbage => Ok(Value::Nothing { span: expr.span }),
|
||||
Expr::Nothing => Ok(Value::Nothing { span: expr.span }),
|
||||
|
Reference in New Issue
Block a user