Nushell core team meeting 2024-07-31

Attendees

  • Jack
  • Devyn
  • Stefan
  • Darren
  • Michael
  • Antoine
  • Rose
  • Jakub
  • Andy
  • Ian

Agenda

  • ctrlc -> plugin, when to reset plugin side Signals? https://github.com/nushell/nushell/issues/13501
  • stretch, pie in the sky, assigning pipelines to variables, without collecting?
  • Add nu_plugin_plist functionality to nu_plugin_formats?
  • Adding content type metadata for other types.. should we pull in a lib to use with open or manually assign.
  • If an underlying Pipeline reader is capable of Seek, should we expose a method to grab to expose Seek.. this would be perf optimization when using polars open as part of a pipeline.. The readers require Seek.
  • ANSI contamination in the pipeline, harmful strip -> PipelineMetadata
  • main stuff

Discussed Topics

ctrl-c with plugins

  • currently doesn't reset after Ctrl-C, quits on the next call
  • for internal stuff the repl will reset after one whole loop
    • Andy: should also broadcast to the plugins?
    • Devyn: for symmetry with internal commands (if multiple commands are spawned e.g. par-each to ensure safe shutdown)
    • Andy: sounds the easiest to do the same, plan a PR (Thanks!)
    • some responsibility on the plugin author (if you want to respond to it)

Stream values

  • lazy
  • scoping challenge, can only be consumed once and can't outlive its closure etc.
  • with the IR VM it would behave like binding a register
  • style of utilities like the rust iterator adapters imaginable
    • e.g. take one entry, then pass the stream to further processing

Detour: timeline IR switch

Devyn: at some point invert the default

Jack's plist plugin

  • relies on a plist crate
  • generally vibe merge into nu_plugin_formats
    • simpler release

content-type metadata

  • when opening a file with open should we set the mime-type based on the extension into the PipelineMetadata
  • database source, are we accepting the breaking data changes in a crate vs manually setting in the from ... converter commands
  • when performing transformations with to need to update
  • useful when piping to http family commands (motivated by jack's endeavour into a S3 plugin)

polars open challenge

  • composability of cloud/storage provider plugins with polars would be nice
  • expects Seek (includes .rewind etc.) not quite compatible with a stream
  • dumping into a temp file may be wasteful for some usecases
  • can we dispatch on kind of input
  • ? sidestep stream and instead use the datasource?
    • our current datasource in PipelineMetadata doesn't get updated should you do transformations in between
    • would need a separate trusted channel/metadata field

ANSI escapes

  • we shouldn't be stripping ANSI escapes implicitly ever
  • change find for now so that whatever is needed for the highlighting is in the PipelineMetadata
  • try to follow this pattern for internal commands
  • discussion about what to do about extensibility:
    • ways to make it possible to define custom behavior on PipelineMetadata for styling?
    • how can plugins add to this?
    • is this losing pipeline composability? there are filters that would potentially know how they have to modify PipelineMetadata to preserve the right styling, and they'd probably just end up throwing it out not knowing what to do
    • possible alternatives
      1. styled strings (like emacs) within the Value variants?
      2. Value::WithMetadata type wrapper that wraps a Box<Value> with some kind of metadata, when needed?
        • it could get complicated to know how to handle this correctly at different places
        • a bit inefficient perhaps, though it does preserve best case performance when this isn't needed
        • probably not something we can hope to represent in NUON
Select a repo