GDQuest / GDQuest/GDScript-formatter

No entry to set "max-line-length" key for formatting in Godot addon settings... And question about .editorconfig

Offen
#316 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Rust
Sterne
455
Forks
39
Ø Merge
1 T. 15 Std.
Gemergte PRs (30 T.)
4

Beschreibung

There is a "Lint Line Length" in addon settings menu which only affects linting. I read plugin.gd and found it was implemented by run the formatter executable with `--max-line-length=` flag:

```gdscript
func lint_code(script: GDScript) -> Array:
# ...
var formatter_arguments: Array = ["lint", ProjectSettings.globalize_path(script_path)]

var max_line_length := get_editor_setting(SETTING_LINT_LINE_LENGTH) as int
formatter_arguments.append("--max-line-length")
formatter_arguments.append(str(max_line_length))
# ...
var exit_code := OS.execute(get_editor_setting(SETTING_FORMATTER_PATH), formatter_arguments, output)
# ...
```

However for `format_code` function there is no line to add `--max-line-length` flag. This flag is valid for the executable itself for formatting, and line length is always a important attribute for a formatter, so it's weird the addon settings doesn't have any entry to set it, and it's quite easy to implement it by adding same codes to the `format code` function. I did so to let Lint Line Length value also affects formatting, and it works fine for me.

Besides `.editorconfig` file seems not work with addon. I tried formatting gdscript files with formatter executable directly using command lines in terminal, and it can find and use parameters in editor config file in parent directory correctly. So it's also weird that it doesn't work with addon. According to plugin.gd:

```gdscript
func get_editorconfig_format_on_save(script_path: String) -> Variant:
var editorconfig_path := ProjectSettings.globalize_path("res://.editorconfig")
# ...
```

Seems that it will only try to find editor config file in project root, and it only reads `gdscript_formatter_format_on_save` parameter from that file, ignoring other parameters. Is it intended?

EDIT:

Just quickly inspected `plugin.gd` again. Found why it ignores the `.editorconfig`. When you use the addon in godot editor, it creates a temp file in elsewhere:

```gdscript
var path_temporary_file := OS.get_temp_dir().path_join(
"gdscript_formatter_%d.gd" % Time.get_ticks_msec()
)
```

The addon will first formats the temp file, then replaces the actual file with it. For my system it creates the temp file in somewhere like `c:/temp/`, far away from my project directory. When use the executable to format it, it will only search through the temp file folder and temp file's parent folders for `.editorconfig`. That's why it can't find my project's `.editorconfig`.

So one of the simplest solutions is just create the temp file in the same folder with the original file you want to format, and it's also easy to implement. Since I'm busy now I may try this method when I have some free time.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Beginne in plugin.gd, vergleiche format_code mit lint_code und untersuche get_editorconfig_format_on_save sowie den Pfad der temporären Datei. Überprüfe, dass die Formatierung die konfigurierte Zeilenlänge erhält und dass die .editorconfig-Erkennung für Projektdateien funktioniert. Die Aufgabe ist abgeschlossen, wenn sich beide Einstellungen beim Formatieren über das Godot-Addon korrekt verhalten.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
godot, rust
Bereich
tooling
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
55/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.