mirror of
https://github.com/nushell/nushell
synced 2024-12-28 14:03:09 +00:00
bdb6daa4b5
This is the first PR towards migrating to a new `$env.PWD` API that returns potentially un-canonicalized paths. Refer to PR #12515 for motivations. ## New API: `EngineState::cwd()` The goal of the new API is to cover both parse-time and runtime use case, and avoid unintentional misuse. It takes an `Option<Stack>` as argument, which if supplied, will search for `$env.PWD` on the stack in additional to the engine state. I think with this design, there's less confusion over parse-time and runtime environments. If you have access to a stack, just supply it; otherwise supply `None`. ## Deprecation of other PWD-related APIs Other APIs are re-implemented using `EngineState::cwd()` and properly documented. They're marked deprecated, but their behavior is unchanged. Unused APIs are deleted, and code that accesses `$env.PWD` directly without using an API is rewritten. Deprecated APIs: * `EngineState::current_work_dir()` * `StateWorkingSet::get_cwd()` * `env::current_dir()` * `env::current_dir_str()` * `env::current_dir_const()` * `env::current_dir_str_const()` Other changes: * `EngineState::get_cwd()` (deleted) * `StateWorkingSet::list_env()` (deleted) * `repl::do_run_cmd()` (rewritten with `env::current_dir_str()`) ## `cd` and `pwd` now use logical paths by default This pulls the changes from PR #12515. It's currently somewhat broken because using non-canonicalized paths exposed a bug in our path normalization logic (Issue #12602). Once that is fixed, this should work. ## Future plans This PR needs some tests. Which test helpers should I use, and where should I put those tests? I noticed that unquoted paths are expanded within `eval_filepath()` and `eval_directory()` before they even reach the `cd` command. This means every paths is expanded twice. Is this intended? Once this PR lands, the plan is to review all usages of the deprecated APIs and migrate them to `EngineState::cwd()`. In the meantime, these usages are annotated with `#[allow(deprecated)]` to avoid breaking CI. --------- Co-authored-by: Jakub Žádník <kubouch@gmail.com>
52 lines
1.6 KiB
TOML
52 lines
1.6 KiB
TOML
[package]
|
|
authors = ["The Nushell Project Developers"]
|
|
description = "Nushell's internal protocols, including its abstract syntax tree"
|
|
repository = "https://github.com/nushell/nushell/tree/main/crates/nu-protocol"
|
|
edition = "2021"
|
|
license = "MIT"
|
|
name = "nu-protocol"
|
|
version = "0.93.1"
|
|
|
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
|
|
[lib]
|
|
bench = false
|
|
|
|
[dependencies]
|
|
nu-utils = { path = "../nu-utils", version = "0.93.1" }
|
|
nu-path = { path = "../nu-path", version = "0.93.1" }
|
|
nu-system = { path = "../nu-system", version = "0.93.1" }
|
|
|
|
brotli = { workspace = true, optional = true }
|
|
byte-unit = { version = "5.1", features = [ "serde" ] }
|
|
chrono = { workspace = true, features = [ "serde", "std", "unstable-locales" ], default-features = false }
|
|
chrono-humanize = { workspace = true }
|
|
fancy-regex = { workspace = true }
|
|
indexmap = { workspace = true }
|
|
lru = { workspace = true }
|
|
miette = { workspace = true, features = ["fancy-no-backtrace"] }
|
|
num-format = { workspace = true }
|
|
rmp-serde = { workspace = true, optional = true }
|
|
serde = { workspace = true, default-features = false }
|
|
serde_json = { workspace = true, optional = true }
|
|
thiserror = "1.0"
|
|
typetag = "0.2"
|
|
|
|
[features]
|
|
plugin = [
|
|
"brotli",
|
|
"rmp-serde",
|
|
"serde_json",
|
|
]
|
|
|
|
[dev-dependencies]
|
|
serde_json = { workspace = true }
|
|
strum = "0.26"
|
|
strum_macros = "0.26"
|
|
nu-test-support = { path = "../nu-test-support", version = "0.93.1" }
|
|
pretty_assertions = { workspace = true }
|
|
rstest = { workspace = true }
|
|
tempfile = { workspace = true }
|
|
|
|
[package.metadata.docs.rs]
|
|
all-features = true
|