Skip to content

Error0229/cs-f

Repository files navigation

Code Formatter for DevToys

A code formatting extension for DevToys 2.0 that supports 34 programming languages with automatic live formatting.

Features

  • Live Auto-Format: Code is automatically formatted as you type (500ms debounce)
  • 34 Languages: Python, JavaScript, TypeScript, JSON, Markdown, TOML, CSS, SCSS, Less, HTML, Vue, Svelte, Astro, YAML, GraphQL, Dockerfile, Java, SQL, C, C++, C#, Go, Go Assembly, Shell/Bash, Lua, R, Delphi/Pascal, Kotlin, Perl, PHP, MATLAB, Ruby, Objective-C, Haskell
  • No External Dependencies: All formatters are bundled as native binaries
  • Per-Language Settings: Configure formatting options for each language
  • Swap & Clear: Quickly swap input/output or clear both editors
  • File Loading: Load code directly from files

Supported Languages & Formatters

Language Formatter Notes
Python Ruff Bundled binary
JavaScript dprint Bundled binary
TypeScript dprint Bundled binary
JSON dprint Bundled binary
Markdown dprint Bundled binary
TOML dprint Bundled binary
CSS dprint Bundled binary
SCSS dprint Bundled binary
Less dprint Bundled binary
HTML dprint Bundled binary
Vue dprint Bundled binary
Svelte dprint Bundled binary
Astro dprint Bundled binary
YAML dprint Bundled binary
GraphQL dprint Bundled binary
Dockerfile dprint Bundled binary
Java google-java-format Native GraalVM binary
SQL sqruff Native Rust binary
C clang-format Bundled binary
C++ clang-format Bundled binary
C# CSharpier Bundled binary
Go gofumpt Bundled binary
Go Assembly asmfmt Bundled binary
Shell/Bash shfmt Bundled binary
Lua StyLua Bundled binary
R air Bundled binary
Delphi/Pascal pasfmt Bundled binary
Kotlin ktlint Bundled binary
Perl Perl::Tidy Bundled binary
PHP PHP-CS-Fixer Bundled binary
MATLAB MH Style Bundled binary
Ruby Rufo Bundled binary
Objective-C Uncrustify Bundled binary
Haskell Ormolu Bundled binary

Requirements

  • DevToys 2.0 (Preview or later)
  • Windows x64 (all formatters are bundled as native binaries)

Installation

From NuGet Package

  1. Download the .nupkg file from Releases
  2. In DevToys, go to Manage Extensions
  3. Click Install from file and select the .nupkg
  4. Restart DevToys

Manual Installation

  1. Extract the .nupkg (it's a ZIP file) to:
    • Windows: %LocalAppData%\DevToys\Plugins\CodeFormatter.DevToys.1.0.0\
  2. Restart DevToys

Usage

  1. Open DevToys and find Code Formatter under the Formatters category
  2. Select your language from the dropdown
  3. Paste or type code in the left editor
  4. Formatted output appears automatically in the right editor

Buttons

  • Swap: Move output to input (useful for re-formatting)
  • Clear: Clear both editors
  • Settings (gear icon): Configure formatter settings for each language
  • Load: Load code from a file

Configuration

Click the gear icon to open settings for any language. Available options vary by formatter:

Python (Ruff)

  • Line Length (40-400)
  • Indent Style (space/tab)
  • Quote Style (double/single/preserve)
  • Line Ending (auto/lf/cr-lf/native)

JavaScript/TypeScript (dprint)

  • Line Width
  • Indent Width
  • Use Tabs
  • Semicolons
  • Quote Style

JSON (dprint)

  • Line Width
  • Indent Width
  • Use Tabs
  • Trailing Commas

SQL (sqruff)

  • Uses ANSI SQL standard formatting

C/C++ (clang-format)

  • Style (LLVM, Google, Chromium, Mozilla, WebKit, Microsoft, GNU)

Go (gofumpt)

  • Extra Rules (stricter formatting)

Shell/Bash (shfmt)

  • Indent Width (0 for tabs)
  • Binary Next Line
  • Case Indent
  • Space Redirects
  • Keep Padding
  • Function Next Line

Settings are saved to ~/.config/code-formatter/config.toml (or equivalent on your OS).

Building from Source

Prerequisites

  • .NET 8.0 SDK

Build

# Clone the repository
git clone https://github.com/Error0229/cs-f.git
cd cs-f

# Download formatter binaries (from GitHub Release)
curl -L -o formatter-binaries.zip "https://github.com/Error0229/cs-f/releases/download/binaries-v1/formatter-binaries.zip"
unzip formatter-binaries.zip -d Binaries

# Build
dotnet build -c Release

# Run tests
dotnet test

# Create NuGet package
dotnet pack -c Release -o ./nupkg

Development

For development with hot reload:

  1. Set environment variables:

    [Environment]::SetEnvironmentVariable("DevToysGuiDebugEntryPoint", "C:\path\to\DevToys.exe", "User")
  2. Press F5 in Visual Studio/VS Code/Rider to debug with DevToys

The Properties/launchSettings.json is configured for debugging with the EXTRAPLUGIN environment variable.

Project Structure

cs-f/
├── CodeFormatterTool.cs      # Main UI and tool implementation
├── Models/
│   ├── Language.cs           # Language enum and extensions
│   ├── FormatterConfig.cs    # Configuration model
│   └── FormatterSettings.cs  # Per-language setting definitions
├── Services/
│   ├── FormatterService.cs   # Formatting orchestration
│   ├── ConfigManager.cs      # TOML config read/write
│   └── ProcessRunner.cs      # External process execution
├── Resources/
│   └── CodeFormatterStrings.resx  # Localized strings
├── Binaries/                 # Bundled formatter executables (19 binaries)
│   ├── ruff.exe              # Python
│   ├── dprint.exe            # JS/TS/JSON/Markdown/TOML/CSS/HTML/Vue/Svelte/Astro/YAML/GraphQL/Dockerfile
│   ├── clang-format.exe      # C/C++
│   ├── gofumpt.exe           # Go
│   ├── shfmt.exe             # Shell/Bash
│   ├── google-java-format.exe # Java
│   ├── sqruff.exe            # SQL
│   ├── csharpier.exe         # C#
│   ├── stylua.exe            # Lua
│   ├── air.exe               # R
│   ├── pasfmt.exe            # Delphi/Pascal
│   ├── ktlint.exe            # Kotlin
│   ├── perltidy.exe          # Perl
│   ├── php-cs-fixer.exe      # PHP
│   ├── mh_style.exe          # MATLAB
│   ├── rufo.exe              # Ruby
│   ├── asmfmt.exe            # Go Assembly
│   ├── uncrustify.exe        # Objective-C
│   └── ormolu.exe            # Haskell
└── CodeFormatter.Tests/      # Integration tests

License

MIT

Acknowledgments

About

Code Snippet Formatter extension for DevToys

Resources

License

Stars

Watchers

Forks

Packages