use nu_protocol::ast::ExternalArgument;
use super::{
CommandEffects, ExternEffect,
predicates::{always, get_subcommand},
};
use crate::{context::LintContext, effect::CommonEffect};
fn cargo_has_streaming_output(context: &LintContext, args: &[ExternalArgument]) -> bool {
let subcommand = get_subcommand(args, context);
matches!(subcommand, "build" | "test" | "run" | "install" | "bench")
}
fn cargo_modifies_fs(context: &LintContext, args: &[ExternalArgument]) -> bool {
let subcommand = get_subcommand(args, context);
matches!(
subcommand,
"build" | "install" | "new" | "init" | "add" | "remove" | "update" | "clean" | "fmt"
)
}
fn cargo_modifies_network(context: &LintContext, args: &[ExternalArgument]) -> bool {
let subcommand = get_subcommand(args, context);
matches!(subcommand, "publish")
}
pub const COMMANDS: &[CommandEffects] = &[
(
"cargo",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, cargo_modifies_fs),
(ExternEffect::ModifiesNetworkState, cargo_modifies_network),
(
ExternEffect::SlowStreamingOutput,
cargo_has_streaming_output,
),
],
),
(
"rustc",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
(ExternEffect::SlowStreamingOutput, always),
],
),
(
"rustup",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
(ExternEffect::SlowStreamingOutput, always),
],
),
(
"rustfmt",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
],
),
(
"make",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
(ExternEffect::SlowStreamingOutput, always),
],
),
(
"cmake",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
(ExternEffect::SlowStreamingOutput, always),
],
),
(
"ninja",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
(ExternEffect::SlowStreamingOutput, always),
],
),
(
"meson",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
(ExternEffect::SlowStreamingOutput, always),
],
),
(
"gcc",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
],
),
(
"g++",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
],
),
(
"clang",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
],
),
(
"clang++",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
],
),
(
"go",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
(ExternEffect::ModifiesNetworkState, always),
(ExternEffect::SlowStreamingOutput, always),
],
),
(
"javac",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
],
),
(
"java",
&[(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
)],
),
(
"mvn",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
(ExternEffect::ModifiesNetworkState, always),
(ExternEffect::SlowStreamingOutput, always),
],
),
(
"gradle",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
(ExternEffect::ModifiesNetworkState, always),
(ExternEffect::SlowStreamingOutput, always),
],
),
(
"gradlew",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
(ExternEffect::ModifiesNetworkState, always),
(ExternEffect::SlowStreamingOutput, always),
],
),
(
"dotnet",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
(ExternEffect::ModifiesNetworkState, always),
(ExternEffect::SlowStreamingOutput, always),
],
),
(
"ffmpeg",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
(ExternEffect::WritesDataToStdErr, always),
(ExternEffect::SlowStreamingOutput, always),
],
),
(
"ffprobe",
&[(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
)],
),
(
"convert",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
],
),
(
"magick",
&[
(
ExternEffect::CommonEffect(CommonEffect::FailsInNormalCircumstances),
always,
),
(ExternEffect::ModifiesFileSystem, always),
],
),
];