{"id":17061056,"url":"https://github.com/chalcolith/eohippus","last_synced_at":"2025-03-23T08:15:48.644Z","repository":{"id":70778885,"uuid":"117725584","full_name":"chalcolith/eohippus","owner":"chalcolith","description":"Pony language compiler tools.","archived":false,"fork":false,"pushed_at":"2025-02-20T19:53:26.000Z","size":642,"stargazers_count":4,"open_issues_count":14,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-20T20:34:22.099Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Pony","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chalcolith.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","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}},"created_at":"2018-01-16T18:43:23.000Z","updated_at":"2025-02-20T19:53:30.000Z","dependencies_parsed_at":"2023-11-25T02:29:36.066Z","dependency_job_id":"f639d763-2b21-4b9e-87cf-af4a6186ea10","html_url":"https://github.com/chalcolith/eohippus","commit_stats":null,"previous_names":["chalcolith/eohippus"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chalcolith%2Feohippus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chalcolith%2Feohippus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chalcolith%2Feohippus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chalcolith%2Feohippus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chalcolith","download_url":"https://codeload.github.com/chalcolith/eohippus/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245072266,"owners_count":20556353,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":"2024-10-14T10:45:56.558Z","updated_at":"2025-03-23T08:15:48.593Z","avatar_url":"https://github.com/chalcolith.png","language":"Pony","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Eohippus\n\n![CI Status](https://github.com/chalcolith/eohippus/actions/workflows/main-push-build-and-test.yml/badge.svg?branch=main\u0026event=push)\n\nThe Eohippus (a [genus of small prehistoric horses](https://en.wikipedia.org/wiki/Eohippus))\nproject contains some functionality for analysis of\n[Pony programming language](https://ponylang.io) source code.  It is written\nprimarily in Pony itself.\n\nThe goals of this project are to eventually:\n\n- Provide tools for analysis of Pony programs, suitable for use in formatters,\n  as well as editors that can use the Language Server Protocol.\n- Provide a front-end for incremental and parallelized Pony compilation.\n\n\u003e The project is at a very early stage.  Hardly any functionality is complete,\n\u003e but there exists enough to demonstrate some potential.\n\u003e\n\u003e Various parts of the code may be vastly over- or under-engineered.\n\u003e\n\u003e [Documentation](http://chalcolith.github.io/eohippus/eohippus--index/) is quite minimal.\n\u003e\n\u003e There is a basic test suite for the parser itself, but hardly anything else\n\u003e for other parts of the project.\n\nThe project contains the following parts:\n\n## [AST](https://github.com/chalcolith/eohippus/tree/main/eohippus/ast)\n\nContains data structures for representing Pony code as an abstract syntax tree.\nStart with [NodeWith](https://github.com/chalcolith/eohippus/blob/main/eohippus/ast/node_with.pony).\n\n## [Parser](https://github.com/chalcolith/eohippus/tree/main/eohippus/parser)\n\nThis implements a [Kiuatan](https://github.com/chalcolith/kiuatan) parser for\nparsing Pony source files.  It is a PEG parser (with left-recursion handling)\nand can recover from errors in functions or classes.\n\nStart with [Builder](https://github.com/chalcolith/eohippus/blob/main/eohippus/parser/builder.pony)\n\n## [Analyzer](https://github.com/chalcolith/eohippus/tree/main/eohippus/analyzer)\n\nProvides [an actor](https://github.com/chalcolith/eohippus/blob/main/eohippus/analyzer/analyzer.pony)\nthat coordinates the analysis (currently parsing, rudimentary scope analysis, and\nlinting) of a workspace containing Pony source files.\n\n## [Linter](https://github.com/chalcolith/eohippus/tree/main/eohippus/linter)\n\nProvides [an actor](https://github.com/chalcolith/eohippus/blob/main/eohippus/linter/linter.pony)\nfor detcting formatting problems in Pony ASTs, and fixing them.\n\n\u003e Currently the linter only knows about the `.editorconfig` standard rule\n\u003e `trim_trailing_whitespace`.\n\n## [Formatter](https://github.com/chalcolith/eohippus/tree/main/eohippus-fmt)\n\nA standalone executable that uses the linter to format Pony source files.\n\n## [Language Server](https://github.com/chalcolith/eohippus/tree/main/eohippus/server)\n\nAn implementation of the [Language Server Protocol](https://microsoft.github.io/language-server-protocol/)\nthat uses Eohippus for analysis.\n\n\u003e The language server is currently very minimal; it provides:\n\u003e\n\u003e - Document synchronization: tracks changes to open files\n\u003e - Diagnostics: provides information about parsing and linting errors.\n\u003e - Go to definition: can find definitions for identifiers, but only in a single file, nor can it correctly handle qualified identifiers. See #19, #20\n\n## [VSCode Extension](https://github.com/chalcolith/eohippus/tree/main/eohippus-vscode)\n\nThere exists the beginnings of a Visual Studio Code extension that uses the\nlanguage server.  It is not published yet, but it can be used for debugging the\nparser, analyzer, and linter.\n\n## API Documentation\n\nSome source code documentation is [here](http://chalcolith.github.io/eohippus/eohippus--index/).\n\n## Development\n\nWorking on Eohippus requires that you have [ponyc](https://github.com/ponylang/ponyc)\nand [corral](https://github.com/ponylang/corral) in your PATH.  You can use the\n[ponyup](https://github.com/ponylang/ponyup) tool to manage these.\n\n### Building\n\nOn Unix:\n\n- `make` builds the unit tests on Unix; `make config=debug` for debug mode.\n- `make test` runs the unit tests.\n- `make fmt` to build the formatter (`build/{release,debug}/eohippus-fmt`).\n- `make lsp` to build the language server (`build/{release,debug}/eohippus-lsp`).\n\nOn Windows:\n\n- `.\\make.ps1 build -Target test` builds the unit tests; `.\\make.ps1 build -Config debug -Target test` for debug mode.\n- `.\\make.ps1 test` runs the unit tests.\n- `.\\make.ps1 build -Target fmt` builds the formatter (`build\\{release,debug}\\eohippus-fmt.exe`).\n- `.\\make.ps1 build -Target lsp` builds the language server (`build\\{release,debug}\\eohippus-lsp`).\n\n### Formatter\n\nUsage: `build/release/eohippus-fmt [--verbose=false] [--fix=true] package_or_file`\n\n- `--verbose=true` will print some information about what the formatter is doing.\n- `--fix=true` (the default) will modify source files to fix formatting problems.\n\n### Visual Studio Code Extension\n\nIn order to test the VSCode extension, you will need to build `eohippus-lsp`.\nYou will also need to run `npm install` in the [eohippus-vscode](https://github.com/chalcolith/eohippus/tree/main/eohippus-vscode) directory before your first use.\n\nThen go to the \"Run and Debug\" pane in VSCode and run the `Debug VSCode Extension`\nconfiguration.  This will open a new instance of VSCode that has the extension loaded, in a [test folder](https://github.com/chalcolith/eohippus/tree/main/eohippus-vscode/test_folder) that contains some example Pony files.\n\nIf the extension is working and can connect to the language server, you should\nsee a folder called `.eohippus` appear in the test folder.  This contains cached\nrepresentations of the various stages of analysis.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchalcolith%2Feohippus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchalcolith%2Feohippus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchalcolith%2Feohippus/lists"}