|
|
||
|---|---|---|
| .gitignore | ||
| CLAUDE.md | ||
| README.md | ||
| bun.lock | ||
| index.ts | ||
| package.json | ||
| tsconfig.json | ||
README.md
csharpierd
A persistent CSharpier formatting daemon with automatic server management and idle timeout.
Features
- Starts CSharpier server in background on first use
- Reuses existing server for subsequent formatting requests
- Automatically shuts down after 1 hour of inactivity
- Thread-safe with file locking mechanism
- Auto-recovery if server crashes
Requirements
Installation
Global Installation
# Bun
bun install -g csharpierd
# npm
npm install -g csharpierd
# Yarn
yarn global add csharpierd
# pnpm
pnpm install -g csharpierd
Local Development
bun install
Usage
Command Line Options
csharpierd <filename> < input.cs # Format C# code from stdin
csharpierd --status # Show server status
csharpierd --stop # Stop the background server
csharpierd --help # Show help message
As Global Command
After global installation:
# Format a C# file
csharpierd Program.cs < Program.cs
# Or using cat
cat MyFile.cs | csharpierd MyFile.cs
# Output formatted code to a new file
csharpierd MyFile.cs < MyFile.cs > MyFile.formatted.cs
# Check server status
csharpierd --status
# Stop the background server
csharpierd --stop
# Show help
csharpierd --help
Local Development
# Format a file
bun index.ts Program.cs < Program.cs
# Check server status
bun index.ts --status
# Stop the server
bun index.ts --stop
# Show help
bun index.ts --help
Server Management
Check Server Status
The --status flag shows detailed information about the server including:
- Running state (RUNNING, STARTING, STOPPED, or NOT RUNNING)
- Process ID and port
- Last access time
- Idle time with color-coded warnings (green < 75% timeout, yellow >= 75%, red >= 100%)
- Configuration details
csharpierd --status
Stopping the Server
The server will automatically shut down after 1 hour of inactivity, but you can manually stop it:
csharpierd --stop
Building
You can compile the TypeScript code to a standalone binary:
bun run build
This creates a csharpierd binary in the current directory that can be distributed without requiring Bun to be installed. The binary is self-contained and includes all dependencies.
# Run the compiled binary
./csharpierd Program.cs < Program.cs
Editor Integration
Neovim with conform.nvim
conform.nvim is a popular formatter plugin for Neovim. Here's how to configure it to use csharpierd:
Basic Configuration
require("conform").setup({
formatters_by_ft = {
cs = { "csharpierd" },
},
formatters = {
csharpierd = {
command = "csharpierd",
args = { "$RELATIVE_FILEPATH" },
stdin = true,
},
},
})
Benefits of using csharpierd with conform.nvim
- Fast formatting: Reuses the CSharpier server process, avoiding startup overhead
- Automatic server management: Server starts on first use and stops after 1 hour of inactivity
How It Works
- First Call: Starts
dotnet csharpier server --server-port 78912in the background - Subsequent Calls: Reuses the existing server process
- Idle Timeout: Server automatically shuts down after 1 hour of inactivity
- State Management: Server state (PID, port, last access time) stored in
/tmp/csharpierd-state.json - Concurrency: Lock file prevents race conditions when multiple instances run simultaneously
Server Details
- Port: 78912 (hardcoded)
- State File:
/tmp/csharpierd-state.json - Lock File:
/tmp/csharpierd.lock - Idle Timeout: 1 hour (3600000ms)
Publishing
To publish this package to npm:
bun publish
License
MIT