Skip to content

Supported Languages

Taskless checks code with ast-grep and prose with Vale. What a rule can read is whatever those two engines can read, so the lists below come from each engine at the version @taskless/cli@0.13.6 ships.

A language missing here can still be enforced. A linter rule is written for a tool your repository already runs, and a runtime rule can read anything.

ast-grep parses 29 languages. The second column is ast-grep’s own spelling, which is what a rule’s language: field takes.

Language language:
Bash Bash
C C
C# CSharp
C++ Cpp
CSS Css
Dart Dart
Elixir Elixir
Go Go
Haskell Haskell
HCL (Terraform) Hcl
HTML Html
Java Java
JavaScript JavaScript
JSON Json
Kotlin Kotlin
Lua Lua
Markdown Markdown
Nix Nix
PHP Php
Python Python
Ruby Ruby
Rust Rust
Scala Scala
Solidity Solidity
Swift Swift
TSX (TypeScript with JSX) Tsx
TypeScript TypeScript
YAML Yaml
Zig Zig

TypeScript and Tsx are separate parsers, so a rule over .tsx files must say Tsx. The list comes from ast-grep run -h on the pinned binary.

Vale picks how to read a file from its extension. These lists come from FormatByExtension in Vale’s source at v3.26.0.

The whole document is prose, and the format’s own syntax is skipped.

Format Extensions
AsciiDoc .adoc, .asciidoc, .asc
DITA .dita
HTML .html, .htm, .shtml, .xhtml
Jupyter Notebook .ipynb
Markdown .md, .mdown, .markdown, .markdn, .rmd
MDX .mdx
MyST .myst
Org .org
QDoc .qdoc, .qdocinc
Quarto .qmd
reStructuredText .rst, .rest
Typst .typ
XML .xml, .xsd

AsciiDoc, DITA, reStructuredText, Typst, and XML are on this list because Vale reads them by calling an external program. Taskless ships none of those programs and leaves these files out of the Vale run, so a repository checks the same way on every machine.

Only the comments are read. The code itself is invisible to a Vale rule.

Format Extensions
C and C++ .cpp, .cc, .c, .cp, .cxx, .c++, .h, .hpp, .h++
C# .cs, .csx
Clojure .clj, .cljs, .cljc, .cljd
CSS .css
Elixir .ex, .exs
Go .go
Haskell .hs
Java .java, .bsh
JavaScript .js, .jsx, .mjs, .cjs
Julia .jl
Kotlin .kt, .kts
Lua .lua
Perl .pl, .pm, .pod
PHP .php
PowerShell .ps1, .psm1, .psd1
Protocol Buffers .proto
Python .py, .py3, .pyw, .rpy, .rpy3, .rpyw, .cpy, .cpy3, .cpyw, .sconstruct
QML .qml
R .r
Ruby .rb, .Gemfile, .Rakefile, .Brewfile, .gemspec
Rust .rs
Sass, SCSS, and Less .sass, .scss, .less
Scala .scala, .sbt
Swift .swift
TypeScript .ts, .tsx, .mts, .cts
Format Extensions
JSON .json
Plain text .txt
TOML .toml
YAML .yaml, .yml

Any extension not listed on this page is also read as plain text: the whole file is one block of prose, code included.

See the Vale engine page for how a rule chooses which of these files it applies to.