An opinionated π¦ .http and .rest πΌ files linter π and formatter β‘.
Via npm:
npm install -g @mistweaverco/kulala-fmt
kulala-fmt can format
and check
.http
and .rest
files.
It can also convert
OpenAPI .yaml
, .yml
or .json
files to .http
files.
Format all .http
and .rest
files in the current directory and its subdirectories:
kulala-fmt format
Format specific .http
and .rest
files.
kulala-fmt format file1.http file2.rest http/*.http
Check if all .http
and .rest
files in the current directory and its subdirectories are formatted:
kulala-fmt check
Check if specific .http
and .rest
files are formatted:
kulala-fmt check file1.http file2.rest http/*.http
Check if all .http
and .rest
files in the current directory and
its subdirectories are formatted and
prints the desired output to the console:
kulala-fmt check --verbose
Check if specific .http
and .rest
files are formatted and
prints the desired output to the console:
kulala-fmt check --verbose file1.http file2.rest http/*.http
Convert OpenAPI .yaml
, .yml
or .json
files to .http
files:
kulala-fmt convert --from openapi openapi.yaml
Convert Postman collection .json
files to .http
files:
kulala-fmt convert --from postman postman.json
Convert Bruno collections to .http
files:
kulala-fmt convert --from bruno path/to/bruno/collection
- Checks if the file is formatted and valid
- Removes extraneous newlines
- Makes sure document variables are at the top of the file
- Lowercases all headers (when HTTP/2 or HTTP/3) else it will uppercase the first letter
- Puts all metadata right before the request line
- Ensures all comments are at the top of the request
So a perfect request would look like this:
@variables1 = value1
# This is a comment
# This is another comment
# @someother metatag
# @name REQUEST_NAME_ONE
GET http://localhost:8080/api/v1/health HTTP/1.1
Content-Type: application/json
{
"key": "value"
}
###
or this:
@variables1=value1
# This is a comment
# This is another comment
# @someother metatag
# @name REQUEST_NAME_ONE
GET http://localhost:8080/api/v1/health HTTP/2
content-type: application/json
{
"key": "value"
}
return {
"stevearc/conform.nvim",
config = function()
require("conform").setup({
formatters = {
kulala = {
command = "kulala-fmt",
args = { "format", "$FILENAME" },
stdin = false,
},
},
formatters_by_ft = {
http = { "kulala" },
},
format_on_save = true,
})
end,
}