Skip to main content

BashArityDict

Struct BashArityDict 

Source
pub struct BashArityDict { /* private fields */ }
Expand description

Arity dictionary for bash command-prefix allow rules.

Provides arity-aware prefix extraction so that auto_allow = ["git status"] correctly matches git status -s and git status --porcelain without also matching git push.

§Example

use codewhale_execpolicy::bash_arity::BashArityDict;

let dict = BashArityDict::new();
assert_eq!(dict.classify(&["git", "status", "-s"]),   "git status");
assert_eq!(dict.classify(&["git", "push", "origin"]), "git push");
assert_eq!(dict.classify(&["npm", "run", "dev"]),     "npm run dev");
assert_eq!(dict.classify(&["ls", "-la"]),             "ls");

Implementations§

Source§

impl BashArityDict

Source

pub fn new() -> Self

Construct a new dictionary pre-loaded with BASH_ARITY_TABLE.

Source

pub fn classify(&self, tokens: &[&str]) -> String

Return the canonical command prefix for a slice of command tokens.

§Algorithm
  1. Strip all flag tokens (tokens that start with -).
  2. Build candidates of depth 1..=3 from positional tokens (longest first).
  3. If a candidate matches a dictionary entry, return arity positional tokens joined with spaces.
  4. If no dictionary entry matches, return the single base command name.
Source

pub fn allow_rule_matches(&self, pattern: &str, command: &str) -> bool

Return true if the allow-rule pattern (a command prefix string such as "git status") matches the concrete command command.

Matching is arity-aware:

  • "git status" matches "git status -s" and "git status --porcelain".
  • "git status" does not match "git push origin main".
  • Exact string patterns (e.g. "ls") still work as before.

For patterns that are not in the arity table, the function falls back to a plain prefix test on the normalised command so that existing exact-match rules continue to work unchanged.

Source

pub fn entries(&self) -> impl Iterator<Item = (&str, u8)>

Iterate over all entries in the dictionary.

Source

pub fn len(&self) -> usize

Return the number of entries in the dictionary.

Source

pub fn is_empty(&self) -> bool

Return true if the dictionary is empty.

Trait Implementations§

Source§

impl Clone for BashArityDict

Source§

fn clone(&self) -> BashArityDict

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for BashArityDict

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for BashArityDict

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.