pretty-gd-js
v2.0.5
Published
A library that makes GDScript code look pretty.
Downloads
353
Maintainers
Readme
pretty.gd for JavaScript

A formatter for GDScript that just works!
Usage
Command line
$ npm install -g pretty-gd-js
$ pretty-gd --help
Usage: pretty-gd [options] [path] [files...]
Options:
-s, --spaces <size> enforce (or, if -t is also set, convert from) space-based indentation
-t, --tabs enforce tab-based indentation
-p, --stdio read from stdin and write it prettified to stdout
-d, --dir prettify all *.gd files in [path]
-w, --watch automatically prettify any modified *.gd files in [path]
-v, --version display version
-h, --help display help for commandGodot editor
From the terminal/command line, type the following:
$ cd path/to/godot/project/
$ pretty-gd -w
Watching ./ for changes...The -w/--watch option alone will not check already existing files, but only those that get modified while pretty-gd -w is running.
You can add -d/--dir to also check existing files, like this: pretty-gd -d -w
To disable the annoying "Files have been modified outside Godot" dialog box, go to the following setting and enable it:
Editor -> Editor Settings -> Text Editor -> Behavior -> Auto Reload Scripts on External Change
Note that when pretty-gd modifies a file, the changes doesn't show up in Godot editor right away. External changes are only detected when the Godot window changes focus.
JavaScript API
Example
import fs from "node:fs"
import Prettifier from "pretty-gd-js"
const prettifier = new Prettifier()
// configure indentation
prettifier.indent_str = "\t"
prettifier.tab_size = 4
let filename = "my_script.gd"
let input = fs.readFileSync(filename)
let output = prettifier.prettify(input) // <- This is the main function
fs.writeFileSync(filename, output + "\n")Known Issues
- The Godot editor only checks for file changes when the window changes from unfocused to focused. So if you're running
pretty-gd -win the background, and it prettifies a script you just saved, you won't see the prettified script until you tab out and back into the editor. - It seems Godot editor only checks the file timestamp down to the second (at least on some systems), meaning if Godot editor saves a file that then gets changed and resaved externally within the same second, Godot editor doesn't detect it as a change. Hence why
pretty-gd -wwill wait one second before resaving the file.
If you come across any other issues with using this software, please let me know.
Release Notes
2.0.5
- Now using the godot version of
pretty.gdtranspiled from GDscript to JavaScript.
1.18.1
- Another bugfix of handling of multiline strings. 🤞
1.18.0
- Making sure that lines ending with a
:is followed by a properly indented line. - Positive numbers/values can now be signed with a
+. - Command line tool renamed to
pretty-gd. (pretty.gdstill included as an alias.)
1.17.0
-a/--autooption to auto-detect type of indentation on each file, instead of auto-detecting only on the first encountered file and applying it to all files, if neither-s,-tor-ais set.pretty.gd -wwill now prettify a file immediately after detecting a change (which can still take up to a second). Instead of delaying the file write to trigger Godot editor's change detection,pretty.gdwill write the file straight away and then update it's modification timestamp a second later.- More strict parsing of number literals.
- A
0gets added to number literals that start or end with a decimal point ore(exponent marker). - Redundant leading zeroes gets removed from number literals.
- Negative numbers that come after closing brackets
)}], strings, names or other numbers are treated as a subtraction of a unsigned number, thus separating the-and the number. - Bugfixed handling of multiline strings, so a string delimiter(
',",'''or""") can now stand alone on a line and the parser will recognize it as either the beginning or end of a string (and not both).
1.16.0
match,tool,onready,export,setget,remote,master,puppet,remotesync,mastersyncandpuppetsyncare no longer treated as keywords that has to be surrounded by whitespace.
1.15.0
- In
--watchmode, file changes will be delayed by one second to ensure Godot editor will detect it as an external change. - Added
--stdiomode for piping data in and out.
1.14.2
- Display version with
--version. - Refactored to use ES modules instead of
require. - Test tool that runs in the browser.
- Fixed bug parsing multi-line strings.
1.14.1
- If
--diror--watchare used without specifying apath, it will default to current directory. - Command-line tool will safely ignore files and folders it cannot access.
1.14.0
- Number literals, including hexadecimals, will be corrected to lower case.
- Support for all types of strings, including
r"raw strings",'''triple-single-quoted strings'''and%"node strings". - Better handling of multiline strings of any type. API changed slightly.
1.13.1
- Command line options to prettify entire folders.
notis no longer treated as a keyword that has to be surrounded by whitespace.{ curly brackets }are now padded inside.- Vertical spacing gets adjusted.
funcandclassdeclarations get two blank lines above them. Maximum one consecutive blank line everywhere else.
1.12.0
- Removed
eolproperty. Godot editor always saves with unix-style endings anyway.
1.11.3
- The command line tool now actually works
- Command line options
1.11.0
- Parse indentation based on visual space, rather than character count
1.10.0
- Treat
!as a sign (like-for negative values)
1.9.0
- Opening curly brackets is now its own class (which helps with spacing in enums)
1.7.0
- Recognize operators longer than one character
- Refactored tokenizer
1.3.0
- Added support for
_in numbers - Added support for
@annotations - Added support for nodepaths starting with
&,^or%
1.2.0
- Recognizing node paths
0.3.0
- Giving keywords some room
0.2.0
- Fancy icon!
0.1.0
Initial release!
