2026-04-10 23:27:55 +02:00
---
layout: page
published: true
2026-04-11 00:18:36 +02:00
noToc: false
2026-04-10 23:27:55 +02:00
noComments: false
noDate: false
2026-06-12 18:45:22 +02:00
title: funstx — Fun syntax checker and fixer
2026-04-10 23:27:55 +02:00
subtitle: Syntax checker for .fun files with optional --fix auto-corrections; usage, exit codes, and limitations.
description: Syntax checker for .fun files with optional --fix auto-corrections; usage, exit codes, and limitations.
permalink: /documentation/funstx/
lang: en
tags:
2026-04-11 00:18:36 +02:00
- auto
- checker
- codes
- corrections
- exit
- files
- fix
- fixer
- funstx
- limitations
- optional
- syntax
2026-04-10 23:27:55 +02:00
---
2026-03-18 21:13:22 +01:00
funstx is a small command‑ line tool that parses .fun source files to verify syntax without executing them. It lives alongside the fun executable in the build directory and is installed by default.
## Features
2026-04-15 01:25:17 +02:00
2026-03-18 21:13:22 +01:00
- Fast syntax checking for one or many .fun files
- Non‑ executing: only parses, never runs code
- Clear error messages with file:line:col
- Optional automatic fixes with `--fix` for common formatting/token issues
- Suitable for batch/CI usage via exit codes
## Usage
2026-04-15 01:25:17 +02:00
<pre>funstx [--fix] [file1.fun] [file2.fun ...]</pre>
2026-03-18 21:13:22 +01:00
- Provide one or more .fun files to check.
- Add `--fix` to attempt safe, automatic corrections before re‑ checking.
### Examples
2026-04-15 01:25:17 +02:00
2026-03-18 21:13:22 +01:00
- Check a single file:
- `funstx examples/arrays.fun`
- Check and auto‑ fix a file:
- `funstx --fix examples/arrays.fun`
- Bulk check and auto‑ fix all examples (recursive):
- `find examples -type f -name '*.fun' -print0 | xargs -0 -n 50 funstx --fix`
## Output
2026-04-15 01:25:17 +02:00
2026-03-18 21:13:22 +01:00
- On success: prints `path/to/file.fun: OK`
- On failure: prints `path/to/file.fun:line:col: syntax error: <message>`
## Exit codes
2026-04-15 01:25:17 +02:00
2026-03-18 21:13:22 +01:00
- `0` : All provided files parsed successfully
- `1` : At least one file failed to parse (after optional fixing)
- `2` : Incorrect usage (e.g., no files provided)
## What `--fix` does
2026-04-15 01:25:17 +02:00
2026-03-18 21:13:22 +01:00
The fixer makes conservative, idempotent edits that align files with parser expectations. It only writes changes if the fixed version parses successfully.
2026-04-15 01:25:17 +02:00
### Applied rules:
2026-03-18 21:13:22 +01:00
- Normalize line endings: CRLF/CR → LF
- Convert leading tabs to spaces; normalize indentation to multiples of two spaces
- Trim trailing spaces
- Ensure the file ends with a single newline
- Normalize type aliases: `sint8|sint16|sint32|sint64` → `int8|int16|int32|int64` (word‑ boundary aware)
2026-04-15 01:25:17 +02:00
### Notes:
2026-03-18 21:13:22 +01:00
- Structural issues that require semantic changes aren’ t auto‑ fixed (e.g., exceeding global limits, missing required delimiters, incomplete statements).
- If parsing still fails after fixing, the original file is left unchanged and an error is reported.
## Build and install
2026-04-15 01:25:17 +02:00
2026-03-18 21:13:22 +01:00
- Built as a regular CMake executable target `funstx` and placed in the same build directory as `fun` (e.g., `build_debug/` or `build_release/` ).
- Installed by default alongside `fun` into `/usr/bin` via `make install` /`cmake --build <build_dir> --target install` .
## Integration tips
2026-04-15 01:25:17 +02:00
2026-03-18 21:13:22 +01:00
- Use `funstx --fix` in pre‑ commit hooks or CI to enforce consistent formatting.
- For quiet CI logs, capture stdout and only surface stderr on failure.
- Combine with `find` /`xargs` to process large trees efficiently (see examples above).
## Limitations
2026-04-15 01:25:17 +02:00
2026-03-18 21:13:22 +01:00
- Does not execute bytecode or validate runtime behavior.
- The auto‑ fixer focuses on formatting and a small set of safe token normalizations; it won’ t rewrite program structure.