nushell/crates
JT d00038eb4b
Reuse the cached parse results of parsed files (#8949)
# Description

This does a lookup in the cache of parsed files to see if a span can be
found for a file that was previously loaded with the same contents, then
uses that span to find the parsed block for that file. The end result
should, in theory, be identical but doesn't require any reparsing or
creating new blocks/new definitions that aren't needed.

This drops the sg.nu benchmark from:
```
╭───┬───────────────────╮
│ 0 │ 280ms 606µs 208ns │
│ 1 │ 282ms 654µs 416ns │
│ 2 │ 252ms 640µs 541ns │
│ 3 │  250ms 940µs 41ns │
│ 4 │ 241ms 216µs 375ns │
│ 5 │ 257ms 310µs 583ns │
│ 6 │ 196ms 739µs 416ns │
╰───┴───────────────────╯
```

to:
```
╭───┬───────────────────╮
│ 0 │ 118ms 698µs 125ns │
│ 1 │       121ms 327µs │
│ 2 │ 121ms 873µs 500ns │
│ 3 │  124ms 94µs 708ns │
│ 4 │ 113ms 733µs 291ns │
│ 5 │ 108ms 663µs 125ns │
│ 6 │  63ms 482µs 625ns │
╰───┴───────────────────╯
```

I was hoping to also see some startup time improvements, but I didn't
notice much there.

# User-Facing Changes
<!-- List of all changes that impact the user experience here. This
helps us keep track of breaking changes. -->

# Tests + Formatting
<!--
Don't forget to add tests that cover your changes.

Make sure you've run and fixed any issues with these commands:

- `cargo fmt --all -- --check` to check standard code formatting (`cargo
fmt --all` applies these changes)
- `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A
clippy::needless_collect` to check that you're using the standard code
style
- `cargo test --workspace` to check that all tests pass
- `cargo run -- crates/nu-std/tests/run.nu` to run the tests for the
standard library

> **Note**
> from `nushell` you can also use the `toolkit` as follows
> ```bash
> use toolkit.nu # or use an `env_change` hook to activate it
automatically
> toolkit check pr
> ```
-->

# After Submitting
<!-- If your PR had any user-facing changes, update [the
documentation](https://github.com/nushell/nushell.github.io) after the
PR is merged, if necessary. This will help us keep the docs up to date.
-->
2023-04-22 07:00:33 +12:00
..
nu_plugin_custom_values Bump to 0.78.1 development version (#8741) 2023-04-05 13:36:10 +12:00
nu_plugin_example Bump to 0.78.1 development version (#8741) 2023-04-05 13:36:10 +12:00
nu_plugin_formats Bump to 0.78.1 development version (#8741) 2023-04-05 13:36:10 +12:00
nu_plugin_gstat Bump git2 from 0.16.1 to 0.17.0 (#8722) 2023-04-05 19:20:58 +00:00
nu_plugin_inc Bump to 0.78.1 development version (#8741) 2023-04-05 13:36:10 +12:00
nu_plugin_python update nu_plugin_python due to signature changes (#8107) 2023-02-18 13:27:24 +00:00
nu_plugin_query Bump to 0.78.1 development version (#8741) 2023-04-05 13:36:10 +12:00
nu-cli fix reedline breaking changes due to PR562 (#8921) 2023-04-18 08:35:10 -05:00
nu-cmd-lang use let-else syntax where possible (#8886) 2023-04-14 20:51:38 +02:00
nu-color-config Relax the closure syntax, highlight differently (#8846) 2023-04-12 05:21:52 +12:00
nu-command Reuse the cached parse results of parsed files (#8949) 2023-04-22 07:00:33 +12:00
nu-engine allow custom commands to show up in $nu.scope.commands better (#8910) 2023-04-17 11:19:37 -05:00
nu-explore Update crossterm version to 0.26 (#8623) 2023-04-14 22:14:57 +02:00
nu-glob Bump to 0.78.1 development version (#8741) 2023-04-05 13:36:10 +12:00
nu-json Bump to 0.78.1 development version (#8741) 2023-04-05 13:36:10 +12:00
nu-parser Reuse the cached parse results of parsed files (#8949) 2023-04-22 07:00:33 +12:00
nu-path Correction bug multiple dots mkdir and touch (#8486) 2023-04-05 20:22:56 +03:00
nu-plugin Bump to 0.78.1 development version (#8741) 2023-04-05 13:36:10 +12:00
nu-pretty-hex Bump to 0.78.1 development version (#8741) 2023-04-05 13:36:10 +12:00
nu-protocol Reuse the cached parse results of parsed files (#8949) 2023-04-22 07:00:33 +12:00
nu-std std run-tests: Rename --command switch to --test; and likewise in --list output (#8895) 2023-04-20 19:41:33 -05:00
nu-system Add ppid to ps command (#8750) 2023-04-05 13:12:01 -05:00
nu-table Bump to 0.78.1 development version (#8741) 2023-04-05 13:36:10 +12:00
nu-term-grid Bump to 0.78.1 development version (#8741) 2023-04-05 13:36:10 +12:00
nu-test-support Add option to not load std-lib. Default tests to not use std-lib (#8833) 2023-04-10 10:55:29 +12:00
nu-utils Change NU_LIB_DIRS not to depend on $nu.config-path (#8887) 2023-04-14 23:16:00 +03:00
README.md Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00

Nushell core libraries and plugins

These sub-crates form both the foundation for Nu and a set of plugins which extend Nu with additional functionality.

Foundational libraries are split into two kinds of crates:

  • Core crates - those crates that work together to build the Nushell language engine
  • Support crates - a set of crates that support the engine with additional features like JSON support, ANSI support, and more.

Plugins are likewise also split into two types:

  • Core plugins - plugins that provide part of the default experience of Nu, including access to the system properties, processes, and web-connectivity features.
  • Extra plugins - these plugins run a wide range of different capabilities like working with different file types, charting, viewing binary data, and more.