Replace &Span with Span since Span is Copy (#9770)

# Description
`Span` is `Copy`, so we probably should not be passing references of
`Span` around. This PR replaces all instances of `&Span` with `Span`,
copying spans where necessary.

# User-Facing Changes
This alters some public functions to take `Span` instead of `&Span` as
input. Namely, `EngineState::get_span_contents`,
`nu_protocol::extract_value`, a bunch of the math commands, and
`Gstat::gstat`.
This commit is contained in:
Ian Manske
2023-07-31 19:47:46 +00:00
committed by GitHub
parent 94bec72079
commit 583ef8674e
35 changed files with 356 additions and 365 deletions

View File

@ -62,11 +62,11 @@ impl Command for KeybindingsList {
let all_options = ["modifiers", "keycodes", "edits", "modes", "events"];
all_options
.iter()
.flat_map(|argument| get_records(argument, &call.head))
.flat_map(|argument| get_records(argument, call.head))
.collect()
} else {
call.named_iter()
.flat_map(|(argument, _, _)| get_records(argument.item.as_str(), &call.head))
.flat_map(|(argument, _, _)| get_records(argument.item.as_str(), call.head))
.collect()
};
@ -78,7 +78,7 @@ impl Command for KeybindingsList {
}
}
fn get_records(entry_type: &str, span: &Span) -> Vec<Value> {
fn get_records(entry_type: &str, span: Span) -> Vec<Value> {
let values = match entry_type {
"modifiers" => get_reedline_keybinding_modifiers().sorted(),
"keycodes" => get_reedline_keycodes().sorted(),
@ -95,15 +95,15 @@ fn get_records(entry_type: &str, span: &Span) -> Vec<Value> {
.collect()
}
fn convert_to_record(edit: &str, entry_type: &str, span: &Span) -> Value {
let entry_type = Value::string(entry_type, *span);
fn convert_to_record(edit: &str, entry_type: &str, span: Span) -> Value {
let entry_type = Value::string(entry_type, span);
let name = Value::string(edit, *span);
let name = Value::string(edit, span);
Value::Record {
cols: vec!["type".to_string(), "name".to_string()],
vals: vec![entry_type, name],
span: *span,
span,
}
}

View File

@ -131,7 +131,7 @@ fn add_menu(
config: &Config,
) -> Result<Reedline, ShellError> {
if let Value::Record { cols, vals, span } = &menu.menu_type {
let layout = extract_value("layout", cols, vals, span)?.into_string("", config);
let layout = extract_value("layout", cols, vals, *span)?.into_string("", config);
match layout.as_str() {
"columnar" => add_columnar_menu(line_editor, menu, engine_state, stack, config),
@ -155,7 +155,7 @@ fn add_menu(
macro_rules! add_style {
// first arm match add!(1,2), add!(2,3) etc
($name:expr, $cols: expr, $vals:expr, $span:expr, $config: expr, $menu:expr, $f:expr) => {
$menu = match extract_value($name, $cols, $vals, $span) {
$menu = match extract_value($name, $cols, $vals, *$span) {
Ok(text) => {
let style = match text {
Value::String { val, .. } => lookup_ansi_color_style(&val),
@ -181,7 +181,7 @@ pub(crate) fn add_columnar_menu(
let mut columnar_menu = ColumnarMenu::default().with_name(&name);
if let Value::Record { cols, vals, span } = &menu.menu_type {
columnar_menu = match extract_value("columns", cols, vals, span) {
columnar_menu = match extract_value("columns", cols, vals, *span) {
Ok(columns) => {
let columns = columns.as_int()?;
columnar_menu.with_columns(columns as u16)
@ -189,7 +189,7 @@ pub(crate) fn add_columnar_menu(
Err(_) => columnar_menu,
};
columnar_menu = match extract_value("col_width", cols, vals, span) {
columnar_menu = match extract_value("col_width", cols, vals, *span) {
Ok(col_width) => {
let col_width = col_width.as_int()?;
columnar_menu.with_column_width(Some(col_width as usize))
@ -197,7 +197,7 @@ pub(crate) fn add_columnar_menu(
Err(_) => columnar_menu.with_column_width(None),
};
columnar_menu = match extract_value("col_padding", cols, vals, span) {
columnar_menu = match extract_value("col_padding", cols, vals, *span) {
Ok(col_padding) => {
let col_padding = col_padding.as_int()?;
columnar_menu.with_column_padding(col_padding as usize)
@ -283,7 +283,7 @@ pub(crate) fn add_list_menu(
let mut list_menu = ListMenu::default().with_name(&name);
if let Value::Record { cols, vals, span } = &menu.menu_type {
list_menu = match extract_value("page_size", cols, vals, span) {
list_menu = match extract_value("page_size", cols, vals, *span) {
Ok(page_size) => {
let page_size = page_size.as_int()?;
list_menu.with_page_size(page_size as usize)
@ -369,7 +369,7 @@ pub(crate) fn add_description_menu(
let mut description_menu = DescriptionMenu::default().with_name(&name);
if let Value::Record { cols, vals, span } = &menu.menu_type {
description_menu = match extract_value("columns", cols, vals, span) {
description_menu = match extract_value("columns", cols, vals, *span) {
Ok(columns) => {
let columns = columns.as_int()?;
description_menu.with_columns(columns as u16)
@ -377,7 +377,7 @@ pub(crate) fn add_description_menu(
Err(_) => description_menu,
};
description_menu = match extract_value("col_width", cols, vals, span) {
description_menu = match extract_value("col_width", cols, vals, *span) {
Ok(col_width) => {
let col_width = col_width.as_int()?;
description_menu.with_column_width(Some(col_width as usize))
@ -385,7 +385,7 @@ pub(crate) fn add_description_menu(
Err(_) => description_menu.with_column_width(None),
};
description_menu = match extract_value("col_padding", cols, vals, span) {
description_menu = match extract_value("col_padding", cols, vals, *span) {
Ok(col_padding) => {
let col_padding = col_padding.as_int()?;
description_menu.with_column_padding(col_padding as usize)
@ -393,7 +393,7 @@ pub(crate) fn add_description_menu(
Err(_) => description_menu,
};
description_menu = match extract_value("selection_rows", cols, vals, span) {
description_menu = match extract_value("selection_rows", cols, vals, *span) {
Ok(selection_rows) => {
let selection_rows = selection_rows.as_int()?;
description_menu.with_selection_rows(selection_rows as u16)
@ -401,7 +401,7 @@ pub(crate) fn add_description_menu(
Err(_) => description_menu,
};
description_menu = match extract_value("description_rows", cols, vals, span) {
description_menu = match extract_value("description_rows", cols, vals, *span) {
Ok(description_rows) => {
let description_rows = description_rows.as_int()?;
description_menu.with_description_rows(description_rows as usize)
@ -719,26 +719,26 @@ impl<'config> EventType<'config> {
fn try_from_columns(
cols: &'config [String],
vals: &'config [Value],
span: &'config Span,
span: Span,
) -> Result<Self, ShellError> {
extract_value("send", cols, vals, span)
.map(Self::Send)
.or_else(|_| extract_value("edit", cols, vals, span).map(Self::Edit))
.or_else(|_| extract_value("until", cols, vals, span).map(Self::Until))
.map_err(|_| ShellError::MissingConfigValue("send, edit or until".to_string(), *span))
.map_err(|_| ShellError::MissingConfigValue("send, edit or until".to_string(), span))
}
}
fn parse_event(value: &Value, config: &Config) -> Result<Option<ReedlineEvent>, ShellError> {
match value {
Value::Record { cols, vals, span } => {
match EventType::try_from_columns(cols, vals, span)? {
match EventType::try_from_columns(cols, vals, *span)? {
EventType::Send(value) => event_from_record(
value.into_string("", config).to_lowercase().as_str(),
cols,
vals,
config,
span,
*span,
)
.map(Some),
EventType::Edit(value) => {
@ -747,7 +747,7 @@ fn parse_event(value: &Value, config: &Config) -> Result<Option<ReedlineEvent>,
cols,
vals,
config,
span,
*span,
)?;
Ok(Some(ReedlineEvent::Edit(vec![edit])))
}
@ -810,7 +810,7 @@ fn event_from_record(
cols: &[String],
vals: &[Value],
config: &Config,
span: &Span,
span: Span,
) -> Result<ReedlineEvent, ShellError> {
let event = match name {
"none" => ReedlineEvent::None,
@ -853,7 +853,7 @@ fn event_from_record(
return Err(ShellError::UnsupportedConfigValue(
"Reedline event".to_string(),
v.to_string(),
*span,
span,
))
}
};
@ -866,7 +866,7 @@ fn edit_from_record(
cols: &[String],
vals: &[Value],
config: &Config,
span: &Span,
span: Span,
) -> Result<EditCommand, ShellError> {
let edit = match name {
"movetostart" => EditCommand::MoveToStart,
@ -968,7 +968,7 @@ fn edit_from_record(
return Err(ShellError::UnsupportedConfigValue(
"reedline EditCommand".to_string(),
e.to_string(),
*span,
span,
))
}
};
@ -995,7 +995,7 @@ mod test {
let vals = vec![Value::test_string("Enter")];
let span = Span::test_data();
let b = EventType::try_from_columns(&cols, &vals, &span).unwrap();
let b = EventType::try_from_columns(&cols, &vals, span).unwrap();
assert!(matches!(b, EventType::Send(_)));
let event = Value::Record {
@ -1015,7 +1015,7 @@ mod test {
let vals = vec![Value::test_string("Clear")];
let span = Span::test_data();
let b = EventType::try_from_columns(&cols, &vals, &span).unwrap();
let b = EventType::try_from_columns(&cols, &vals, span).unwrap();
assert!(matches!(b, EventType::Edit(_)));
let event = Value::Record {
@ -1041,7 +1041,7 @@ mod test {
];
let span = Span::test_data();
let b = EventType::try_from_columns(&cols, &vals, &span).unwrap();
let b = EventType::try_from_columns(&cols, &vals, span).unwrap();
assert!(matches!(b, EventType::Send(_)));
let event = Value::Record {
@ -1091,7 +1091,7 @@ mod test {
}];
let span = Span::test_data();
let b = EventType::try_from_columns(&cols, &vals, &span).unwrap();
let b = EventType::try_from_columns(&cols, &vals, span).unwrap();
assert!(matches!(b, EventType::Until(_)));
let event = Value::Record {
@ -1159,7 +1159,7 @@ mod test {
let vals = vec![Value::test_string("Enter")];
let span = Span::test_data();
let b = EventType::try_from_columns(&cols, &vals, &span);
let b = EventType::try_from_columns(&cols, &vals, span);
assert!(matches!(b, Err(ShellError::MissingConfigValue(_, _))));
}
}

View File

@ -59,7 +59,7 @@ impl Highlighter for NuHighlighter {
($shape:expr, $span:expr, $text:expr) => {{
let spans = split_span_by_highlight_positions(
line,
&$span,
$span,
&matching_brackets_pos,
global_span_offset,
);
@ -143,7 +143,7 @@ impl Highlighter for NuHighlighter {
fn split_span_by_highlight_positions(
line: &str,
span: &Span,
span: Span,
highlight_positions: &Vec<usize>,
global_span_offset: usize,
) -> Vec<(Span, bool)> {

View File

@ -105,7 +105,7 @@ fn gather_env_vars(
span: full_span,
} = token
{
let contents = engine_state.get_span_contents(&full_span);
let contents = engine_state.get_span_contents(full_span);
let (parts, _) = lex(contents, full_span.start, &[], &[b'='], true);
let name = if let Some(Token {