<h1 align="center">Flint</h1>

<p align="center">
	[Experimental] A fast, friendly linter.
	❤️‍🔥
</p>

<p align="center">
	<a href="https://github.com/flint-fyi/flint/blob/main/.github/CODE_OF_CONDUCT.md" target="_blank"><img alt="🤝 Code of Conduct: Kept" src="https://img.shields.io/badge/%F0%9F%A4%9D_code_of_conduct-kept-21bb42" /></a>
	<a href="https://github.com/flint-fyi/flint/blob/main/LICENSE.md" target="_blank"><img alt="📝 License: MIT" src="https://img.shields.io/badge/%F0%9F%93%9D_license-MIT-21bb42.svg" /></a>
	<a href="http://npmjs.com/package/flint" target="_blank"><img alt="📦 npm version" src="https://img.shields.io/npm/v/flint?color=21bb42&label=%F0%9F%93%A6%20npm" /></a>
	<img alt="💪 TypeScript: Strict" src="https://img.shields.io/badge/%F0%9F%92%AA_typescript-strict-21bb42.svg" />
</p>

<img align="right" alt="A flaming heart atop a brown linter-style squiggly line" src="docs/flint.png">

**Flint** is an experimental new linter.
It's a proof-of-concept to explore the concepts in the following blog posts:

- [Hybrid Linters: The Best of Both Worlds](https://www.joshuakgoldberg.com/blog/hybrid-linters-the-best-of-both-worlds)
- [If I Wrote a Linter, Part 1: Architecture](https://www.joshuakgoldberg.com/blog/if-i-wrote-a-linter-part-1-architecture)
- [If I Wrote a Linter, Part 2: Developer Experience](https://www.joshuakgoldberg.com/blog/if-i-wrote-a-linter-part-2-developer-experience)
- [If I Wrote a Linter, Part 3: Ecosystem](https://www.joshuakgoldberg.com/blog/if-i-wrote-a-linter-part-3-ecosystem)
- [If I Wrote a Linter, Part 4: Summary](https://www.joshuakgoldberg.com/blog/if-i-wrote-a-linter-part-4-summary)

This project might go nowhere.
It might show some of those ideas to be wrong.
It might become a real linter.
Only time will tell.

In the meantime, come talk about it on the [Flint Discord](https://flint.fyi/discord).

## Usage

Coming soon.

![Terminal screenshot of a colored linter output. ~/repos/flint $ node bin/index.js      /Users/josh/repos/flint/src/example-lint-failures.ts   1:25  Consecutive non-null assertion operators are unnecessary.                    consecutiveNonNullAssertions   4:0   For-in loops over arrays have surprising behavior that often leads to bugs.  forInArrays  ✖ Found 2 reports across 1 file. ~/repos/flint $ ](https://github.com/user-attachments/assets/f703224e-916f-442e-aa7b-bc2a16b6ad72)
