{"id":41374260,"url":"https://github.com/darklab8/fl-darklint","last_synced_at":"2026-01-23T09:58:40.724Z","repository":{"id":64196688,"uuid":"572051518","full_name":"darklab8/fl-darklint","owner":"darklab8","description":null,"archived":false,"fork":false,"pushed_at":"2024-12-28T19:50:20.000Z","size":8264,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-28T20:26:10.834Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/darklab8.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-11-29T13:02:07.000Z","updated_at":"2024-12-28T19:50:22.000Z","dependencies_parsed_at":"2024-02-11T17:28:16.278Z","dependency_job_id":"19593413-18c1-49ef-87cf-9e487e42eab4","html_url":"https://github.com/darklab8/fl-darklint","commit_stats":null,"previous_names":["darklab8/darklab_fldarklint"],"tags_count":29,"template":false,"template_full_name":null,"purl":"pkg:github/darklab8/fl-darklint","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darklab8%2Ffl-darklint","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darklab8%2Ffl-darklint/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darklab8%2Ffl-darklint/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darklab8%2Ffl-darklint/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/darklab8","download_url":"https://codeload.github.com/darklab8/fl-darklint/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/darklab8%2Ffl-darklint/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28687413,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T05:48:07.525Z","status":"ssl_error","status_checked_at":"2026-01-23T05:48:07.129Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-23T09:58:36.505Z","updated_at":"2026-01-23T09:58:40.719Z","avatar_url":"https://github.com/darklab8.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# fl-darklint\n\n![](docs/assets/diff_example.png)\n\nTool for validations, formatting and denormalization with human readable comments\n\n## Features\n\n- Parses all game configs, and runs its sets of validation.\n  - By default package of validations to ensure this Freelancer folder game data is compatible with Darkstat\n  - list is expandable further. (to create validator folder later)\n- Darklint is able to format configs to more uniform way\n  - like having all specified parameters bringing to lower case.\n  - Or writing all sections [Section] in same way\n  - or it can round all floating numbers to exact same format.\n  - it uses ORM library fl-configs able to map all data for reading and writing back using Data structs to do that\n    so it is functionality easy to expand further. See [formmater](./darklint/formatter/) package for expanding.\n- Additionally it is capable to supply human readable comments to config objects for easier life.\n  - `denormalizer` module is responsible for this\n  - for example all [Base] entities in universe.ini file receive comment what is their infocard name right in a config file\n\n## Denormalization features:\n\n- to `market_*.ini` files it adds to bases human readable name extracted from infocard.txt\n- to `market_*.ini` reports if base is recycle_candidate, by checking missmatch in its set system and pressence in files + if system is `fp7` or `ga13`, example:\n  - `;%is_recycle_candidate = DARK_ERR_0001 base_good.base=ga06_03_base not in universe.ini-\u003eBase.system-\u003eSystem.file-\u003esystems\\ga13\\ga13.ini | universe.ini-\u003eBase.system=ga13 in [[ga13 fp7]]`\n  - see picture example below\n\n## Future development\n\nCurrently the project reached Minimum Viable Product state.\n- As of version v1.7.0 succesfully managed to parse all comments in the way that they are written back without impacting development of game configs.\n- Example of usage is provided by [Github Workflow for FLSR](https://github.com/darklab8/FLSR/blob/main/.github/workflows/test.yml)\n- For applying formatting, u need to use it locally. \n\nThe tool is intended to add additional features in linting configurational files.\nIt is possible adding any other additional rules for checking foreign key data integrity between objects\nOr adding additional commented strings to objects with helpful information\n\nRequest new features [here](https://github.com/darklab8/fl-darklint/issues) or there [Darklab Discord server](https://discord.gg/zFzSs82y3W)\n\n\n\n\n## Usage with installation\n### At linux\n\n- install curl if not installed.(`apt update \u0026\u0026 apt install -y curl` for debian/ubuntu)\n- install darklint with `sudo rm $(which darklint) ; sudo curl -L $(curl -Ls -o /dev/null -w %{url_effective} https://github.com/darklab8/fl-darklint/releases/latest | sudo sed \"s/releases\\/tag/releases\\/download/\")/darklint-linux-amd64 -o /usr/local/bin/darklint \u0026\u0026 sudo chmod 777 /usr/local/bin/darklint`\n- check installation with `darklint version` command. Expect to see `OK darklint version: v{version}`\n\n### install specific version\n\n- install with `rm $(which darklint) ; curl -L https://github.com/darklab8/darklint/releases/download/v{VERSION}/darklint-linux-amd64 -o /usr/local/bin/darklint \u0026\u0026 chmod 777 /usr/local/bin/darklint`\n\n### At Windows\n\n- install [Git Bash](https://git-scm.com/downloads)\n- install darklint `mkdir -p ~/bin ; rm $(which darklint) ; curl -L $(curl -Ls -o /dev/null -w %{url_effective} https://github.com/darklab8/fl-darklint/releases/latest | sed \"s/releases\\/tag/releases\\/download/\")/darklint-windows-amd64.exe -o ~/bin/darklint.exe \u0026\u0026 chmod 777 ~/bin/darklint.exe`\n- check installation with `darklint version` command. Expect to see `OK darklint version: v{version}`\n\nP.S. `~/bin/darklint.exe` must be any valid bin path (`echo $PATH`, `echo %PATH%` to get the list) accessable by your tool from where u are going to use it.\n\n### Manual installation\n\nGo to [releases](\u003chttps://github.com/darklab8/fl-darklint/releases\u003e) and download necessary binary file on your own and put to some bin folder present in your $PATH.\n\n### Manual building\n\n- install `git`\n- install go of version [like in workflow](./.github/workflows/build.yml)\n- install [Taskfile](\u003chttps://taskfile.dev/usage/\u003e)\n- run `task build`. The result is in dist folder.\n- if smth is incorrect, see github workflow mentioned above for up to date instructions\n\n## after installation\n\n- go to Freelancer folder root and apply with `darklint format`\n\n## Simplified usage:\n\n- just [download here](https://github.com/darklab8/fl-darklint/releases)\n- copy executable file to root folder of freelancer\n- run `{{executable}} format`\n- check help info in `{{executable}} --help`\n- check additional flag to command with `{{executable}} format --help`\n\n## Dev Requirements\n\n- cobra generator https://github.com/spf13/cobra-cli/blob/main/README.md\n- cobra guide https://github.com/spf13/cobra/blob/main/user_guide.md\n- godoc\n- add binary discovery for cobra-cli, godoc detection\n  - `export PATH=\"$PATH:/usr/local/go/bin:$HOME/go/bin\"`\n- Git hooks of conventional commits\n  - [docs](https://gist.github.com/qoomon/5dfcdf8eec66a051ecd85625518cfd13)\n  - [app](https://www.npmjs.com/package/git-conventional-commits)\n\n## Architecture\n\n```mermaid\nflowchart TD\n    darktool --\u003e cmd\n    cmd[cmd\\nUser Commands to CLI interface]\n    cmd --\u003e validator[validator\\nlints freelancer configs to strict format]\n    validator --\u003e flconfigs[flconfigs\\nProvides static typed access to parsedFreelancer configs]\n    validator --\u003e denormalizer[denormalizer\\nDenormalizes parsed data for more\\nhuman readable view of freelancer configs]\n    denormalizer --\u003e flconfigs\n```\n\n## Contributors\n\n- [@dd84ai](https://github.com/dd84ai) // coding\n- [@Groshyr](https://github.com/Groshyr) // spark of inspiration for project birth + beta tester + feature requester + domain expert\n\n# License\n\nfl-darklint was originally created by Andrei Novoselov (aka darkwind, aka dd84ai)\nThe work is released under GPL license, free to modify, copy and etc. as long as you keep code open source and mentioned original author.\nSee [LICENSE](./LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdarklab8%2Ffl-darklint","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdarklab8%2Ffl-darklint","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdarklab8%2Ffl-darklint/lists"}