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 compileOpen 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.tsDevelopment
Watch Mode
npm run watchCode Style
npm run lint
npm run formatLinting 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 groupingTypes: feat, fix, docs, test, perf, refactor
Testing
npm test # Run all tests
npm run test:coverage # With coverage report
npx vitest --ui # Interactive UIPlease 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
- Fork and create a feature branch
- Make your changes
- Add tests
- Run
npm testandnpm run lint - 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.