Skip to content

should we support plumatic style defn syntax (?) #28

Closed as not planned
Closed as not planned

Description

@jasonjckn

Plumatic style function syntax :- can be found in a few libraries
https://github.com/plumatic/schema#beyond-type-hints
https://github.com/metosin/malli/blob/master/docs/function-schemas.md#function-schema-metadata
https://github.com/gnl/ghostwheel

is there any desire to support this out-of-the-box? it might be challenging to add an user configuration mechanism for it , and there's not a lot of downside to understanding the optional syntax. This is a qualitatively distinct problem than supporting different function definition aliases 'defn', which is more amenable to user config.

:- appears both to denote function return type, as well as function parameter(s) type, the only place where support needs to be added is the function return type as far as I can tell.

it's a trivial change in clojure-ts--docstring-query , I'm using this rough code right now, but probably needs a :match expression the literal :-
image

Expected behavior

image

Actual behavior

image

Steps to reproduce the problem

(defn foobar :- long?
  "comment string"
  [a :- long?]
  :do-something)

Environment & Version information

clojure-ts-mode version

0.2.0

Emacs version

30.x

Activity

  1. bbatsov commented on Mar 7, 2025

    @bbatsov
    Member

    I think it's best to avoid syntax that's not from the core language, as ones we add support for something it's a slippery slope from there. With TreeSitter it's easy to add additional font-locking features, and I think that's what people looking for additional font-locking should be doing. The indentation rules are slightly trickier to extend, but that's totally doable.

  2. bbatsov commented on Apr 16, 2025

    @bbatsov
    Member

    With version 0.3 the indentation rules are configurable as well, so I guess this can be closed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementEnhancement to existing functionality

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions