nushell/crates
WindSoilder 055edd886d
Make plugin commands support examples. (#7984)
# Description

As title, we can't provide examples for plugin commands, this pr would
make it possible


# User-Facing Changes

Take plugin `nu-example-1` as example:
```
❯ nu-example-1 -h
PluginSignature test 1 for plugin. Returns Value::Nothing

Usage:
  > nu-example-1 {flags} <a> <b> (opt) ...(rest)

Flags:
  -h, --help - Display the help message for this command
  -f, --flag - a flag for the signature
  -n, --named <String> - named string

Parameters:
  a <int>: required integer value
  b <string>: required string value
  (optional) opt <int>: Optional number
  ...rest <string>: rest value string

Examples:
  running example with an int value and string value
  > nu-example-1 3 bb
```

The examples session is newly added.

## Basic idea behind these changes
when nushell query plugin signatures, plugin just returns it's signature
without any examples, so nushell have no idea about the examples of
plugin commands.
To adding the feature, we just making plugin returns it's signature with
examples.

Before:
```
        1. get signature
         ----------------> 
Nushell ------------------  Plugin
        <-----------------
        2. returns Vec<Signature>
```

After:
```
        1. get signature
        ----------------> 
Nushell ------------------  Plugin
        <-----------------
        2. returns Vec<PluginSignature>
```
        
When writing plugin signature to $nu.plugin-path:
Serialize `<PluginSignature>` rather than `<Signature>`, which would
enable us to serialize examples to `$nu.plugin-path`

## Shortcoming
It's a breaking changes because `Plugin::signature` is changed, and it
requires plugin authors to change their code for new signatures.

Fortunally it should be easy to change, for rust based plugin, we just
need to make a global replace from word `Signature` to word
`PluginSignature` in their plugin project.

Our content of plugin-path is really large, if one plugin have many
examples, it'd results to larger body of $nu.plugin-path, which is not
really scale. A solution would be save register information in other
binary formats rather than `json`. But I think it'd be another story.

# 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

# 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-02-08 16:14:18 -06:00
..
nu-cli respect use_ansi_coloring configuration (#7912) 2023-02-02 00:03:05 +01:00
nu-color-config Bump to 0.75.1 development version (#7930) 2023-01-31 23:55:29 +01:00
nu-command Make plugin commands support examples. (#7984) 2023-02-08 16:14:18 -06:00
nu-engine Fix $nu path separators on Windows (#7996) 2023-02-07 11:50:39 -08:00
nu-explore Bump to 0.75.1 development version (#7930) 2023-01-31 23:55:29 +01:00
nu-glob Bump to 0.75.1 development version (#7930) 2023-01-31 23:55:29 +01:00
nu-json Bump to 0.75.1 development version (#7930) 2023-01-31 23:55:29 +01:00
nu-parser Make plugin commands support examples. (#7984) 2023-02-08 16:14:18 -06:00
nu-path Bump to 0.75.1 development version (#7930) 2023-01-31 23:55:29 +01:00
nu-plugin Make plugin commands support examples. (#7984) 2023-02-08 16:14:18 -06:00
nu-pretty-hex Bump to 0.75.1 development version (#7930) 2023-01-31 23:55:29 +01:00
nu-protocol Make plugin commands support examples. (#7984) 2023-02-08 16:14:18 -06:00
nu-system Bump to 0.75.1 development version (#7930) 2023-01-31 23:55:29 +01:00
nu-table Bump to 0.75.1 development version (#7930) 2023-01-31 23:55:29 +01:00
nu-term-grid Bump to 0.75.1 development version (#7930) 2023-01-31 23:55:29 +01:00
nu-test-support Fix: dst error on cp command (#7895) 2023-02-01 21:48:21 +01:00
nu-utils Clarify two config fields (#7969) 2023-02-06 00:01:23 +01:00
nu_plugin_custom_values Make plugin commands support examples. (#7984) 2023-02-08 16:14:18 -06:00
nu_plugin_example Make plugin commands support examples. (#7984) 2023-02-08 16:14:18 -06:00
nu_plugin_gstat Make plugin commands support examples. (#7984) 2023-02-08 16:14:18 -06:00
nu_plugin_inc Make plugin commands support examples. (#7984) 2023-02-08 16:14:18 -06:00
nu_plugin_python Fix typos by codespell (#7600) 2022-12-26 02:31:26 -05:00
nu_plugin_query Make plugin commands support examples. (#7984) 2023-02-08 16:14:18 -06: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.