Google Summer of Code project


(Gabriel Gonzalez) #1

I wanted to give an update on the status of the Dhall project for Google Summer of Code.

A few months ago Alan Zimmerman suggested that Dhall support for the Language Server Protocol would make an excellent Google Summer of Code project idea, so I submitted a proposal, which you can find here:

https://summer.haskell.org/ideas.html#dhall

A student named Frederik Ramcke from Chalmers University of Technology has volunteered for this project and is currently writing up a proposal. This proposal will expand on the initial Language Server Protocol support created by @panaeon by adding new features to the integration.

We created a list of possible IDE features to propose working on, ranked by their difficulty when brainstorming for this project:

  • Easy: Features that wrap out-of-the-box code from dhall package
    • dhall lint a document
      • This is the best task to get started with contributing to the LSP
        implementation
    • Optionally provide dhall's detailed error output
    • Hash on hover for imports
    • Freeze selected import
    • Inline import (either the immediate import or all transitive imports)
    • Import code lens
      • Show the contents of an import, immediate or transitive
    • β-normalized expression code lens
    • α-normalized expression code lens (i.e. DeBruijn indices)
      • Particularly cool feature because helps avoid symbol obfuscation
        when auditing potentially malicious code
  • Medium: Features that require recursive traversal of expression tree
    • Add inferred type to let binding
    • Type on hover
    • Auto-fixes:
      • Misspelled identifiers (using string edit distance)
  • Hard: The biggest challenge is Dhall’s unique import system will make it
    more difficult to build the graph of identifiers and their references
    • This is necessary to support several IDE-like features, like:
    • Go to definition
    • Find all references
    • List all available symbols
  • Auto-completion
    • Easy: Auto-complete built-ins and keywords
    • Medium: Auto-complete identifiers in scope
  • Execute command
    • Easy: Can integrate with dhall repl command verbatim
    • Medium: Intelligently load project files systematically into REPL

If there are any features in particular that you would like to see prioritized, let us know. Keep in mind that we will probably stick to Easy/Medium features to implement given the short project timeline.