Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @cdprice02
18 changes: 18 additions & 0 deletions .github/CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Code of Conduct

Contributors to ferrish are expected to engage respectfully and constructively.

## What we expect

- Critique ideas, not people. Technical disagreement is welcome; personal attacks are not.
- Keep discussion focused on the work — the code, the design, the problem being solved.
- Be direct and honest, but remain considerate of others.

## What is not acceptable

- Harassment, insults, or discriminatory language in any form.
- Sustained hostility toward contributors, regardless of the context.

## Reporting

If you experience or witness conduct that violates these expectations, contact the project maintainer directly: @cdprice02.
25 changes: 25 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
---
name: Bug report
about: Report a bug in ferrish
labels: bug
---

## Steps to reproduce

1.
2.
3.

## Expected behavior

<!-- What did you expect to happen? -->

## Actual behavior

<!-- What actually happened? Include error output if applicable. -->

## Environment

- ferrish version: <!-- e.g. 0.1.0 or commit SHA -->
- OS: <!-- e.g. macOS 14.4, Ubuntu 22.04 -->
- Rust version: <!-- rustc --version -->
17 changes: 17 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
name: Feature request
about: Suggest a new feature or improvement for ferrish
labels: enhancement
---

## Problem statement

<!-- What are you trying to do? What is the limitation or gap you're running into? -->

## Proposed solution

<!-- Describe your proposed solution or change. Be as specific as possible. -->

## Alternatives considered

<!-- Have you tried any workarounds or alternative approaches? What were their trade-offs? -->
21 changes: 21 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
## Description

<!-- Describe what this PR does and why. Reference any related issues (e.g. closes #N). -->

## Type of change

- [ ] Bug fix
- [ ] New feature
- [ ] Refactor
- [ ] Docs
- [ ] Chore

## Test checklist

- [ ] `cargo test` passes
- [ ] `cargo clippy --all-targets --all-features -- -D warnings` passes
- [ ] New tests added (if applicable)

---

<!-- ferrish core principles: focused change, correctness over cleverness, clear description. -->
17 changes: 10 additions & 7 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,19 @@ These principles guide all development decisions:

Modules use **file-based organization** (not mod.rs):

- `src/lexer.rs` - Tokenization
- `src/parser.rs` - AST construction
- `src/evaluator.rs` - Execution
- `src/repl.rs` - Interactive shell loop
- `src/builtins.rs` - Built-in commands
- `src/shell_io.rs` - I/O management
- `src/shell.rs` — REPL loop; reads input, calls parser, calls executor, handles fatal vs. recoverable errors
- `src/parser.rs` — Splits input into command + args; resolves whether the command is a built-in, a PATH executable, or unrecognized
- `src/executor.rs` — Dispatches to built-in handlers or spawns external processes
- `src/command/builtin.rs` — Implementations of `exit`, `cd`, `echo`, `pwd`, `type`
- `src/command/executable.rs` — Wraps an external binary found on PATH
- `src/io.rs` — `ShellIo` trait with `StandardIo` (real I/O) and `MockIo` (testing)
- `src/ctx.rs` — Shell context and state
- `src/error.rs` — `ShellError` enum; distinguishes fatal from recoverable errors
- `src/arg.rs` — Argument parsing and representation

## Key Development Notes

**Error Reporting**: Source span errors in lexer/parser are critical for user experience. Use **miette** to provide context and suggestions.
**Error Reporting**: Use `thiserror` for structured project error types and `anyhow` for error propagation/context; keep user-facing messages clear and actionable.

**Testing**: Shell-bound tests are essential. Beyond unit and integration tests, spawn ferrish as a subprocess to verify actual behavior (I/O, pipes, semantics, signal handling).

Expand Down
Loading