Coder Social home page Coder Social logo

lue-bird / elm-review-missing-record-field-lens Goto Github PK

View Code? Open in Web Editor NEW
2.0 1.0 1.0 371 KB

elm-review: helper generation

Home Page: https://package.elm-lang.org/packages/lue-bird/elm-review-missing-record-field-lens/latest/

License: MIT License

JavaScript 3.51% Elm 96.49%
elm elm-review lens record-field accessors nested prism variants

elm-review-missing-record-field-lens's Issues

RE: VariantLens

2 thoughts

  1. rename: VariantLens.GenerateUsed -> NoMissingVariantPrism
    a. One because in Optics terms "Lenses" don't operate over Sum types / ADT's only "Product Types" aka records. Prisms operate over Sums/ADTS/Variants...
    b. To match better with NoMissingRecordFieldLens ๐Ÿคทโ€โ™‚๏ธ

  2. Generate Prisms inline below the definition of the Variant to not force the defining module to expose its constructors.
    EG: I'd like to "expose" some lenses for operating over say pieces of an otherwise opaque record... something like...

module OpaqueThing exposing (Stuff, current)

type Stuff = Stuff Internal
-- generated opaque Prism constructor for composing helpers for accessing pieces of internal state.
onStuff : Lens Stuff Internal reach wrap
onStuff  = -- ...

type alias Internal = 
    { current_ : String
    , toggle : Bool  -- Notice callers have no access to this toggle property.
    } 

current : Lens Stuff String reach wrap
current = onStuff << Lens.current_

Simple self-contained correct example missing

Unfortunately I cannot get this review rule working. It always results in "I found no errors!". Here's my example code:

Main.elm

module Main exposing (Model, main)

import Browser
import Html exposing (Html, div, text)


type alias Model =
    { x : Int
    }


main : Program () Model Msg
main =
    Browser.sandbox { init = { x = 0 }, update = update, view = view }


type Msg
    = Increment
    | Decrement


update : Msg -> Model -> Model
update msg model =
    case msg of
        Increment ->
            { model | x = model.x + 1 }

        Decrement ->
            { model | x = model.x - 1 }


view : Model -> Html Msg
view model =
    div []
        [ text <| String.fromInt model.x
        ]

review/src/ReviewConfig.elm

module ReviewConfig exposing (config)

import RecordFieldHelper.GenerateUsed
import Review.Rule as Rule exposing (Rule)


config : List Rule
config =
    [ RecordFieldHelper.GenerateUsed.rule
        { generator = RecordFieldHelper.GenerateUsed.accessors
        , generateIn = ( "Lense", [] )
        }
    ]

Then I run npx elm-review --debug:

I found no errors!

I had expected that something gets generated in Lense.elm.

I also tried to create Lense.elm as an empty module beforehand, but didn't work either.

Could someone provide a simple self-contained correct example?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.