Contributing

Contributing

We'd love your help making Plainwind better. Here's how to get started.

Quick Start

git clone https://github.com/gavbarosee/plainwind.git
cd plainwind
npm install
npm run compile

Open the Run and Debug panel in VS Code or Cursor, then press F5 to launch the extension in a debug window.

After making changes, you'll need to run npm run compile again and reload the extension window.

Project Structure

src/
├── core/
│   ├── parsing/
│   │   ├── expressions.ts
│   │   ├── index.ts
│   │   ├── patterns.ts
│   │   ├── types.ts
│   │   └── utilities.ts
│   └── translation/
│       ├── categorizer/
│       ├── engine/
│       └── rules/
├── vscode/
│   ├── commands/
│   ├── ui/
│   │   ├── highlight/
│   │   ├── panel/
│   │   │   ├── enhancements/
│   │   │   ├── panelManager.ts
│   │   │   ├── panelState.ts
│   │   │   └── panelTemplate.ts
│   │   ├── codelens.ts
│   │   ├── hover.ts
│   │   └── statusBar.ts
│   └── extension.ts
└── extension.ts

Development

Watch Mode

npm run watch

Code Style

npm run lint
npm run format

Linting and formatting run automatically on commit.

Commit Format

Use Conventional Commits (opens in a new tab):

feat: add Solid.js classList support
fix: correct hover positioning
docs: clarify category grouping

Types: feat, fix, docs, test, perf, refactor

Testing

npm test              # Run all tests
npm run test:coverage # With coverage report
npx vitest --ui       # Interactive UI

Please add tests for new features. You can use helpers in tests/_support/testUtils.ts:

import { testFlexibleMatch } from '@tests/_support/testUtils';
 
it.each(CASES)('%s -> %s', testFlexibleMatch(translateClass));

We aim for 70%+ line coverage. See tests/README.md (opens in a new tab) for details.

Pull Requests

  1. Fork and create a feature branch
  2. Make your changes
  3. Add tests
  4. Run npm test and npm run lint
  5. Push and open a PR

Please include in your PR:

  • What changed and why
  • How you tested it
  • Screenshots for UI changes

We'll review within a few days and get back to you.

Areas of Focus

We're particularly interested in:

  • Framework support (Qwik, Astro)
  • Tailwind plugin compatibility
  • Performance optimization
  • Edge case coverage

Browse issues (opens in a new tab) or start a discussion (opens in a new tab) to see what's needed.

Questions?

Have questions? Join us on Discussions (opens in a new tab) or open an Issue (opens in a new tab) for bugs.