idea plugin 0.0.1-SNAPSHOT: basic coloring and editing aids
This commit is contained in:
1 parent
9c342c5c72
commit
06e8e1579d
46 files changed
+4192
-6
No files matched your search
@@ -0,0 +1,62 @@
|
||||
# Lyng formatter (core, CLI, and IDE)
|
||||
|
||||
This document describes the Lyng code formatter included in this repository. The formatter lives in the core library (`:lynglib`), is available from the CLI (`lyng fmt`), and is used by the IntelliJ plugin.
|
||||
|
||||
## Core library
|
||||
|
||||
Package: `net.sergeych.lyng.format`
|
||||
|
||||
- `LyngFormatConfig`
|
||||
- `indentSize` (default 4)
|
||||
- `useTabs` (default false)
|
||||
- `continuationIndentSize` (default 8)
|
||||
- `maxLineLength` (default 120)
|
||||
- `applySpacing` (default false)
|
||||
- `applyWrapping` (default false)
|
||||
- `LyngFormatter`
|
||||
- `reindent(text, config)` — recomputes indentation from scratch (braces, `else/catch/finally` alignment, continuation indent under `(` `)` and `[` `]`), idempotent.
|
||||
- `format(text, config)` — runs `reindent` and, depending on `config`, optionally applies:
|
||||
- a safe spacing pass (commas/operators/colons/keyword parens; member access `.` remains tight; no changes to strings/comments), and
|
||||
- a controlled wrapping pass for long call arguments (no trailing commas).
|
||||
|
||||
Both passes are designed to be idempotent. Extensive tests live under `:lynglib/src/commonTest/.../format`.
|
||||
|
||||
## CLI formatter
|
||||
|
||||
```
|
||||
lyng fmt [--check] [--in-place|-i] [--spacing] [--wrap] <file1.lyng> [file2.lyng ...]
|
||||
```
|
||||
|
||||
- Defaults: indent-only; spacing and wrapping are OFF unless flags are provided.
|
||||
- `--check` prints files that would change and exits with code 2 if any changes are detected.
|
||||
- `--in-place`/`-i` rewrites files in place (default if not using `--check`).
|
||||
- `--spacing` enables the safe spacing pass (commas/operators/colons/keyword parens).
|
||||
- `--wrap` enables controlled wrapping of long call argument lists (respects `maxLineLength`, no trailing commas).
|
||||
|
||||
Examples:
|
||||
|
||||
```
|
||||
# check formatting without modifying files
|
||||
lyng fmt --check docs/samples/fs_sample.lyng
|
||||
|
||||
# format in place with spacing rules enabled
|
||||
lyng fmt --spacing -i docs/samples/fs_sample.lyng
|
||||
|
||||
# format in place with spacing + wrapping
|
||||
lyng fmt --spacing --wrap -i src/**/*.lyng
|
||||
```
|
||||
|
||||
## IntelliJ plugin
|
||||
|
||||
- Indentation: always enabled, idempotent; the plugin computes per-line indent via the core formatter.
|
||||
- Spacing/wrapping: optional and OFF by default.
|
||||
- Settings/Preferences → Lyng Formatter provides toggles:
|
||||
- "Enable spacing normalization (commas/operators/colons/keyword parens)"
|
||||
- "Enable line wrapping (120 cols) [experimental]"
|
||||
- Reformat Code applies: indentation first, then spacing, then wrapping if toggled.
|
||||
|
||||
## Design notes
|
||||
|
||||
- Single source of truth: The core formatter is used by CLI and IDE to keep behavior consistent.
|
||||
- Stability first: Spacing/wrapping are gated by flags/toggles; indentation from scratch is always safe and idempotent.
|
||||
- Non-destructive: The formatter carefully avoids changing string/char literals and comment contents.
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/env lyng
|
||||
//#!/bin/env lyng
|
||||
|
||||
import lyng.io.fs
|
||||
import lyng.stdlib
|
||||
@@ -6,9 +6,23 @@ import lyng.stdlib
|
||||
val files = Path("../..").list().toList()
|
||||
val longestNameLength = files.maxOf { it.name.length }
|
||||
|
||||
val format = "%-"+(longestNameLength+1) +"s %d"
|
||||
for( f in files ) {
|
||||
var name = f.name
|
||||
if( f.isDirectory() ) name += "/"
|
||||
println( format(name, f.size()) )
|
||||
/*
|
||||
The comment for our test1.
|
||||
There are _more_ data
|
||||
*/
|
||||
fun test21() {
|
||||
21
|
||||
}
|
||||
|
||||
|
||||
val format = "%-"+(longestNameLength+1) +"s %d"
|
||||
for( f in files )
|
||||
{
|
||||
var name = f.name
|
||||
if( f.isDirectory() )
|
||||
name += "/"
|
||||
println( format(name, f.size()) )
|
||||
}
|
||||
|
||||
test21()
|
||||
|
||||
Reference in new issue
Block a user