Allow open to work with 'from ...' block commands (#5049)

* Remove panic from BlockCommands run function

Instead of panicing, the run method now returns an error to prevent
nushell from unexpected termination.

* Add ability to open command to run with blocks

The open command tries to parse the content of the file
if there is a command called 'from (file ending)'.  This works
fine if the command was 'built in' because the run method doesn't
fail in this case.  It did fail on a BlockCommand, though.

This change will first probe if the command contains a block and
evaluate it, if this is the case.  If there is no block, it will run
the command the same way as before.

* Add test open files with BlockCommands

* Update open.rs

* Adjust file type on open with BlockCommand parser

Co-authored-by: JT <547158+jntrnr@users.noreply.github.com>
This commit is contained in:
Simon Goller
2022-04-01 20:52:32 +02:00
committed by GitHub
parent 2cb815b7b4
commit 19c3570cf9
4 changed files with 33 additions and 8 deletions

View File

@ -8,6 +8,7 @@ use crate::engine::EngineState;
use crate::engine::Stack;
use crate::BlockId;
use crate::PipelineData;
use crate::ShellError;
use crate::SyntaxShape;
use crate::VarId;
@ -548,7 +549,9 @@ impl Command for BlockCommand {
_call: &Call,
_input: PipelineData,
) -> Result<crate::PipelineData, crate::ShellError> {
panic!("Internal error: can't run custom command with 'run', use block_id");
Err(ShellError::UnlabeledError(
"Internal error: can't run custom command with 'run', use block_id".to_string(),
))
}
fn get_block_id(&self) -> Option<BlockId> {