{"id":21579323,"url":"https://github.com/neandertech/langoustine","last_synced_at":"2025-04-10T17:42:25.382Z","repository":{"id":52272626,"uuid":"520783782","full_name":"neandertech/langoustine","owner":"neandertech","description":"Clean room implementation of the LSP protocol in Scala, published for JVM, JS, and Native platforms","archived":false,"fork":false,"pushed_at":"2025-03-23T11:12:54.000Z","size":50284,"stargazers_count":52,"open_issues_count":25,"forks_count":5,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-03-23T12:18:41.737Z","etag":null,"topics":["language-server","lsp","scala","scala-js","scala-native"],"latest_commit_sha":null,"homepage":"https://neandertech.github.io/langoustine/","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/neandertech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2022-08-03T07:40:36.000Z","updated_at":"2025-03-23T11:04:28.000Z","dependencies_parsed_at":"2023-11-30T17:59:12.531Z","dependency_job_id":"402b3d0e-1bf1-4466-bcdc-fdc93af9ce1b","html_url":"https://github.com/neandertech/langoustine","commit_stats":null,"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neandertech%2Flangoustine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neandertech%2Flangoustine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neandertech%2Flangoustine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neandertech%2Flangoustine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/neandertech","download_url":"https://codeload.github.com/neandertech/langoustine/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248262198,"owners_count":21074262,"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":["language-server","lsp","scala","scala-js","scala-native"],"created_at":"2024-11-24T13:12:59.386Z","updated_at":"2025-04-10T17:42:25.366Z","avatar_url":"https://github.com/neandertech.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Langoustine - write Language Servers in Scala 3\n\n... and use them with Javascript, JVM, or even native libraries\n\n**Status as of August 3rd, 2022**: active, but very unstable, use (don't) at your own risk\n\n[![langoustine-lsp Scala version support](https://index.scala-lang.org/neandertech/langoustine/langoustine-lsp/latest.svg)](https://index.scala-lang.org/neandertech/langoustine/langoustine-lsp)\n\n* [API documentation](https://neandertech.github.io/langoustine/)\n* **SBT:** `libraryDependencies += \"tech.neander\" %% \"langoustine-app\" % \"0.0.21\"`\n* **Mill**: `ivy\"tech.neander::langoustine-app::0.0.21\"`\n* [**Scala CLI**](https://scala-cli.virtuslab.org) `//\u003e using lib \"tech.neander::langoustine-app::0.0.21\"`\n\n## What is it? \n\nIt's a clean room implementation of the LSP protocol definitions.\n\nBy \"clean room\" we mean\n\n1. Using only Scala libraries \n2. Idiomatic Scala code\n3. Using Scala 3 features\n\nMost of the code is generated directly from the recently published LSP specification in JSON format.\n\n\n## Is there a simple example?\n\nIntroducing [Quickmaffs](https://github.com/neandertech/quickmaffs), a primitive language with a LSP, REPL, and an interpreter, designed specifically\nto demonstrate how easy it is to build Language Servers with Langoustine.\n\n![GIF demonstrating operations in the editor with the made up Quickmaffs language](https://raw.githubusercontent.com/neandertech/quickmaffs/main/docs/lsp.gif)\n\n## What can I use it for? \n\nWriting a language server for:\n\n1.  your own toy language\n   \n2.  already existing language but with specific requirements\n    \n    For example, see [Grammar.js LSP](https://github.com/keynmol/grammar-js-lsp) - written specifically \n    for the `grammar.js` files in the Tree Sitter grammars.\n\n    It uses the Scala.js artifact of this project, because it's easier to parse JavaScript using a \n    JavaScript library and package the whole server as a Node.js application.\n\n3. markup languages and protocol files, think\n   1. Certain YAML files (LSP with verification for Github Actions YAML files!)\n   2. Avro files\n   3. Protobuf files\n   4. Smithy files ([**jk** a great one already exists](https://github.com/disneystreaming/smithy-language-server))\n   5. LLVM IR text files (for all those compiler engineers!)\n   6. Scala Native's NIR files\n   7. loads and loads more\n   \nEven basic Go To Definition implementation for the files you work with for hours on a daily basis can have \nan immeasurable impact on your productivity.\n\n## Do I need to write a custom extension for my editor to talk to my LSP server ?\n\nDepends on how amazing you want the UX to be really, but if you're a lazy sloth like we are, head over the following list : \n\n* [neovim](https://neovim.io/doc/user/lsp.html), if you hate rodents \n* [vscode](https://marketplace.visualstudio.com/items?itemName=neandertech.langoustine-vscode), if you like rodents (provided by yours truly) \n* [intellij](https://github.com/gtache/intellij-lsp) (no commits in a few years, will need a brave soul to step-up) \n* [emacs](https://emacs-lsp.github.io/lsp-mode/), if you have 20 fingers on each of your 8 hands \n* [sublime](https://lsp.sublimetext.io/guides/client_configuration/), if you're a decent person who pays for software \n\n## Should I use it?\n\nPlease refer to this helpful diagram:\n\n```text \n┌──────────────┐                                                     \n│  YAS KWEEEN  │                                                     \n│     area     │                           .───────────.             \n└──────────────┘                       _.─'             `──.         \n        │                           ,─'                     '─.      \n        │                          ╱                           ╲     \n        │                        ,'      People who enjoy       `.   \n        │                       ╱          using Scala 3          ╲  \n        │       .───────────.  ;                                   : \n        │   _.─'             `─;.                                  : \n        └────────────────────────────┐                              :\n        ╱                     │     ╲│     .───────────.            │\n      ,'                      │      │._.─'             `──.        │\n     ╱                        :     ,┼'╲                    '─.     ;\n    ;                          :   ╱ │  :                      ╲   ; \n    ;                          : ,'  │  :                       `. ; \n   ;                            ╱    │   :                        ╲  \n   │                           ; ╲   ▼   │                       ╱ : \n   │     People who enjoy      ;  `.     │                     ,'  : \n   :     creating Language    ;     ╲    ;                    ╱     :\n    :         Servers         │      '─.;                  ,─'      │\n    :                         │         `──.           _.─'         │\n     ╲                        :        ╱    `─────────'             ;\n      ╲                        :      ╱                            ; \n       `.                      :    ,'      People who are         ; \n         ╲                      ╲  ╱           ready for          ╱  \n          '─.                   ,╲'         disappointment       ╱   \n             `──.           _.─'  `.                           ,'    \n                 `─────────'        ╲                         ╱      \n                                     '─.                   ,─'       \n                                        `──.           _.─'          \n                                            `─────────'              \n```\n\nIf you are in the YAS KWEEN area - welcome and let's have some fun!\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneandertech%2Flangoustine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneandertech%2Flangoustine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneandertech%2Flangoustine/lists"}