# Tooling Team Meetings 2023-01-02: Moved to https://hackmd.io/@tmattio/Sy5CU8x5i ## 2022-12-12: Team meeting - Paul-Elliot: odoc source code gen. Fixing knowne bugs - Also worked a bit on ocaml-platform and reviewed PRs - In holidays next week. Continue work on odoc code gen. - Release ocaml-platform-installer - Jules: Mostly odoc. Spent time on a tricky bug. Release of odoc, did general maintenance. Jon found a critical bug. Merged PRs on plaform-installer, especially pure binary and cache migration. Released this morning. Off Wed and Friday. - Guillaume: Worked on ocamlformat support for JS. Also pushed a PR with the diff of AST/CST. Looked into table parsing for odoc. - Emile: odoc w/ Paul-Elliot to take line directives into account. Also worked on ocamlformat to check AST/CST diff issue - Thibaut: Platform roadmap and quarter review. ## 2022-12-06: Team meeting Attendees: Emile, Paul-Elliot, Guillaume, Jules Agenda: - Planning - dune fmt - odoc table - odoc sources - ocamlformat - odoc release - platform installer Past: - Paul-Elliot + odoc sources reference driver, module alias bugs + platform installer cache migration - Guillaume off - Emile + odoc table + dune fmt Discussion, blocked + ocamlformat JS, ast mapper - Jules + odoc sources struggle with module aliases + odoc general maintenance Priorities for the quarter: - platform installer release + merge what's still open + eventual polish + test within the team before any release - odoc release + managed Jon call with Jon to plan together - odoc sources + Demo is ready! + Polish - ocamlformat + Urgent bug from JS Other priorities: - dune fmt: Format without having a config + Requires `diff-friendly` profile - odoc tables + Polish needed Remove extra node from AST Alignment in heavy syntax Cleanup parser Assignments: - Paul-Elliot + HTML in odoc-sources + platform installer release + background: ppxlib manual - Jules + maintain the odoc-sources PR + platform installer release + odoc release - Emile + HTML in odoc-sources + Look at diff-friendly + Test the platform installer + dune fmt discussions - Guillaume + fix bug reported by JS + odoc tables ## 2022-11-28: Bi-weekly Attendées: Emile, Jules, Thibaut Agenda: - Priorities - Carl request to have someone come at JS Action points: - Source code in odoc - Jules and Paul-Elliot to continue this - Platform Installer - Dedicate 1~2 days to complete WIP PR - Dune fmt - Won't be done this quarter, depends on diff-friendly profile. - Emile to land a PR for the ocamlformat conf stanza in Dune. - Tables - Jules and surtout Emile to take over after dune fmt PR - Commercial support - 2210 -> to merge after final review - https://github.com/ocaml-ppx/ocamlformat/issues/2201 - Jules and Emile to have a look to find a solution - Thibaut will continue to discuss with JS to see if we want to send someone to their offices to complete their migration to ocamlformat with Carl. Would solve a lot of collaboration issues, since after the migration they would be able to plan their migrations of ocamlformat. ## 2022-11-22: Dev Attendées: Paul-Elliot, Jules Odoc TODO list: - Wrapped libraries: Carry source code when expanding module aliases. When hidden modules are expanded inside the entry module, source code information is lost. - Test other things that have their own page That the links are correct, for example functor results, `module M = Map.Make (String)` - Update the reference driver to render source code Odoc important follow-up: - Update Dune Trivial: Register the new dependencies on the `.cmt` and pass the new flags to `odoc compile`. - Link back from source to doc Big usability improvement. The information is already in Lang, it just needs to be processed and presented. ## 2022-11-21: OCaml Platform Roadmap Workshop Attendees: Thibaut, Paul-Elliot, Jules, Emile ### Agenda - Q4 roadmap, now with priorities - Review high-level Platform spec (principles and workflows) - Discuss 2023 roadmap for Tooling team - For selected workflows, discuss metrics and users to involve ### Notes - Workflows - Editors - Would be nice to have support for OCaml on GitHub code explorer - Might be difficult to ship vim extension with LSP because it adds a lot of constraints (deps, version of Vim, etc.) - Everything is done in the editor - How to catch up with progress on the OCaml Platform? - Formatting - Paul-Elliot: Should be able to format by structured item - Jules: It's a goal of ocamlformat - Worried about dune <> opam - How to discover publication workflow and exploration of libraries if we hide the opam mentions (but the repo is still opam-repository) - Rename opam-repository to ocaml/packages? - Debugging - OCamlPro might have good feedback on this! - Litterate programming - Name isn't relevant anymore, it's not only markdown anymore - Google search will never give mdx as a first result - Documentation - It's actually the workflow of odig - Installer generation - Need to update dune file to make static build. Should be able to do this from the CLI. - Roadmap - Dune <> opam is the most impactful - Risk and Cost - Difficulty: Planned - Impact: 5/5 - We must contribute to this. Especially integration with tools. Init, fmt, doc. - Documentation (tooling and packages) - maintenance of odoc - Search documentation - Documenting the OCaml Platform (and its tools). Especially Dune. - Editor support for odoc (syntax and tooling) - Have a CI on opam-repository - Gamify the doc on OCaml.org? - Button to open an issue directly on OCaml.org package doc - Guidelines on documentation on OCaml.org - Bounty for the documentation - Review documentation of projects Projects: ocamlformat, odoc, etc... Is it visible on `docs.ocaml.org` ? Is the `README` clear ? - Documentation (workflows) - Add docs on the workflows to OCaml.org - Tutorial on how to document a package How to write an `index.mld` page, how to look good on `docs.ocaml.org`. Style guide and conventions. - Debugging - Risk and Cost - Difficulty: 5/5 - Impact: 4/5 - It's a huge gap in development workflow - It's the foundation of other languages - People use Printf - Have the integration in the editor (DAP) - Risk: might be too big to chew, do we need someone with exp on the compiler? - Team is highly motivated to work on this - Linting - Risk and Cost - Difficulty: 3/5 (MVP is easy, but difficult to go beyond) - Impact: 3/5 - A lot of design to do, how do we define the rules? - Might not be high priority: users learn to code reading code also. Not a blocker if it doesn't exist. Jules: Disagree. - We can keep a list of rules we want to have in a linter, then revisite later - R2C Interesting rules: * Migration between OCaml versions. eg. deprecated functions alternatives, stricter type checking * Functions not compatible with Windows (might be attributes added to the Stdlib) * Make use of thread-safety attributes added to the stdlib - Project generation - Risk and Cost - Difficulty: ? - Impact: More than linting - Useful for beginners and advanced users - Should also be able to update an existing project (e.g. add documentation?) - See good ideas on Spin, Drum, Oskel but the goal is to improve `dune init`. - Host templates in a central repository - Host templates in third party repositories eg. a library like Dream hosting its own templates - Open a REPL - A lot of people use it, but as soon as you're on a large project, it's limited - Distributing applications - Not sure how many people build applications though? Although that's the ultimate goal of a programming language: building applications. - How to distribute to cloud providers - Editor support - Odoc markup support in editors (syntax highlighting) - General maintenance Notes: - Paul-Elliot: focus on the most impactful in terms of number of people - Emile: web frameworks are critical for the adoption of a language - Jules: Linter seems to be commonly requested. Even from the OCaml core team (eg. migrate from deprecated functions) - The cream - Package publication - Not a priority: target is experienced developers, not beginners ## 2022-11-14: Planning Agenda: - Catch up for Thibaut - Planning Work last weeks: - Jules - Ocaml-platform: Removed the "duplicated" cache. - odoc: Link to source code, using shapes. Still need to work out the edge cases. (e.g. wrapped libraries) - Thibaut: - Update on the Platform roadmap. Shared with Jane Street and need to talk to users - Paul-Elliot: - Continued to work on odoc. Syntax highlighting is working, now working on jump to definition. Later also will work on types - OCaml-platform: small issues and implement "binary only" PR - Ppxlib documentation: made good progress - Emile - Dune: Specify in Dune files which files are to be formatted - ocamlformat: Investigate the JS issue. OCamlformat: - Can we have an explanation of the pain point they have? - This would allow us to suggest alternatives - ETA: a week, but let's try to understand what the problem is anyways. - Sharing code: - Can they share code they would like to work on from their open source code? odoc: - Before we work on the index file, we want to finish the source code in doc project ## 2022-11-09: Dev Présents : Jules, Paul-Elliot, Emile Done: Adding syntax highlighting on top of Jules+Guillaume branch. Work this week: - Jules: + ocaml-platform: Versionned data and some refactoring Persistent data might get out of date as new version of the tools are installed. We need a way to migrate them. First a refactor to clarify the way the cache is used and remove edge cases. Then a refactor to remove uneeded persistent data (overriden system-compiler packages). + Investigate the canonical/hidden case in odoc - Paul-Elliot: + Write syntax highlighting css + Prototype extracting interesting locations and associated data from cmts + Continue Ppxlib manual - Emile: + Integration between Dune and OCamlformat Links documentation -> source code: - Actually implement links documentation -> source code Source code is now generated, with coloration. Locations informations are in Lang. - Find test case about canonical and hidden paths For example, "wrapped" toplevel modules generated by Dune. Module "A" of a library "Foo" have its source code inside the compilation unit "Foo__A". It is possible that this "hidden" module is never passed to html-generate. We must make sure that the source code is generated. - Write css of syntax highlighting. Counting occurences project: - Output usage statistics of identifiers to enable ranked search We discussed that the informations needed for this project are also the information needed for "source -> documentation" links. These informations are: a list of interesting locations in the implementation and their associated identifier. It should be done first. Future work: - Prototype of extracting interesting locations and associated data from cmts. These interesting locations are: + use of a value, and the identifier associated + use of a value, and the type associated + use of a type, and associated identifier ## 2022-11-07: Planning Présents : Jules, Paul-Elliot, Emile - Previous: - Paul-Elliot: Generation of a document from a set of position. Used for syntax highlighting. - Jules & Guillaume: + odoc: * Load and resolve locations of declarations and store them in Lang. Locations are looked up from the Shape of the module, which contain a description of the whole signature, including locations. Shapes are stored in `.cmt` files but Odoc is often given a `.cmti`. The corresponding `.cmt` is now also loaded to retrieve the Shape. This operation might fail and the locations will simply not be available in the generated doc. - Next: - Emile : Work on occurance counting. - Paul-Elliot: Integrate in the current branch. (pair program with Jules on Tuesday) + Generate the html source in the same folder as the interface html + Discussion on the shape location vs odoc location (for directory structure): the shape reduction is not allowed to use information from outside (not compiled) modules. - Paul-Elliot: working on https://github.com/tarides/ocaml-platform-installer/issues/132 - Jules: Work on ocaml-platform-installer + Pure binary: naming our cached packages "ocamlformat+bin+platform" won't work anymore with Opam's `with-dev-setup`, we need to override the original package in every case. https://github.com/tarides/ocaml-platform-installer/issues/128 + Versionned cache: We need to change the layout of the cache and need to migrate automatically + Investigate faster resolution of versions. Currently several seconds. ## 2022-11-02: Planning Présents : Jules, Guillaume, Paul-Elliot, Emile - Yesterday: - Paul-Elliot: Generating html: - Interfacing with highlight-js or hilite is not possible - look at what Haskell is doing: syntax highlighting with info from lexer - Jules et Guillaume: - Add locations to the document Lang types (alternative to using the shapes) - Next: - Paul-Elliot: Try to implement ternary red-black tree and html generation - Jules: Continue on loading cmts and looking up locations. Planned PP with Guillaume. ## 2022-10-26: Dev Présents : Jules, Guillaume, Paul-Elliot, Emile - Yesterday: - Paul-Elliot: experimented on Typedtree traversal and ocaml env lookup - Jules et Guillaume: Expérimente avec les shapes pour lookup les definitions. WIP - Next: - Jules + Guillaume continue pairing on same subject - Paul-Elliot + Emile : use typed-tree traversal and env info to generate html augmented source code. Prochaine réunion: Lundi? ## 2022-10-25: Dev Présents : Jules, Guillaume, Paul-Elliot Discussion: - Quand stocker les shapes, source code et autres informations sur l'implémentation - Au moment de la phase "compile" d'odoc a les avantages suivants: - `odoc compile` prendrait le code source en argument et les `cmt` dans les chemins de recherche (`-I`) - le .cmt et le code source pourrait ne plus être présent aux autres phases - On peut générer un document (au sens de odoc) représentant l'implémentation qui pourra être transformé en html (ou autre) par différents renderer et non seulement celui officiel d'odoc. - Il faudra modifier le driver d'odoc (dune) dans tous les cas - Guillaume a commencé le backend: https://github.com/ocaml/odoc/pull/904 Travail aujourd'hui : - Jules et Guillaume pair-programment sur les shapes et la pipeline - Paul-Elliot expérimente avec le backend html (récupèrer des infos dans le typedtree et les utiliser pour qqchose de simple) ## 2022-10-24: Planning