3.2 KiB
3.2 KiB
MCALC Agent Guidelines
Project Overview
A simple Dioxus calculator application. Uses Dioxus 0.7 for UI with static CSS styling.
Build Commands
# Development
cargo run # Run desktop app (default feature)
cargo run --features web # Run web version
# Build
cargo build # Debug build
cargo build --release # Release build
# Testing
cargo test # Run all tests
cargo test <test_name> # Run specific test
# Linting & Formatting
cargo fmt # Format code
cargo fmt -- --check # Check formatting without changes
cargo clippy # Run linter
cargo clippy -- -D warnings # Lint with deny warnings
Code Style
Formatting
- Use
cargo fmtwith default rustfmt settings - 4-space indentation
- Maximum line length: 100 characters
Naming Conventions
- Components: PascalCase (e.g.,
Calculator,DisplayArea) - Functions/Methods: snake_case (e.g.,
calculate_result,input_digit) - Signals: snake_case with
_suffix convention (e.g.,first_num,operator) - Types/Enums: PascalCase
Imports
- Group 1:
use dioxus::prelude::*(Dioxus core) - Group 2:
use crate::(local modules) - Standard library imports last
Components (Dioxus 0.7)
- Prefix with
#[allow(non_snake_case)]if needed - Props must be owned values (use
Stringnot&str) - Use
Signal<T>for reactive state - Components return
Element
#[component]
fn MyComponent(mut value: Signal<String>) -> Element {
rsx! { div { "{value}" } }
}
State Management
- Use
use_signal(|| initial_value)for local state - Use
.write()for mutable access,.read()for references - Prefer
*signal.write() = valueoversignal.set(value)for direct mutation
Error Handling
- Prefer early returns with
returnor?operator - Use
Result<T, E>for fallible operations - Silent failures acceptable for user input parsing (graceful degradation)
CSS Guidelines
- CSS files in
/assets/main.css - Use CSS custom properties (variables) for theming
- Follow BYTEMALTE design system colors when applicable
- Class naming: kebab-case (e.g.,
btn-number,display-area)
File Structure
src/
main.rs # App entry point
ui.rs # UI components
logic.rs # Business logic
assets/
main.css # Global styles
public/ # Static assets served at root
Design System (BYTEMALTE)
When modifying CSS, follow these conventions:
| Element | Border Radius |
|---|---|
| Buttons | 8px |
| Cards | 16px |
| Inputs | 8px |
Colors:
- Primary:
#8888FF - Secondary:
#3DDC84 - Background:
#0F172A - Surface:
#1E293B - Error:
#EF4444
Dioxus 0.7 Reference
Components
#[component]
fn App() -> Element {
let mut count = use_signal(|| 0);
rsx! {
button { onclick: move |_| *count.write() += 1, "{count}" }
}
}
Signals
let mut value = use_signal(|| String::new());
value(); // clone value
value.read(); // &T reference
value.write(); // &mut T
RSX Patterns
rsx! {
div {
for item in items { span { "{item}" } }
if condition { p { "Shown" } }
}
}