You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Thanks helping with the development of Elm! This document describes the basic
4
-
standards for opening pull requests and making the review process as smooth as
5
-
possible.
3
+
Thanks contributing to the Lamdera compiler!
6
4
7
-
## Licensing
8
-
9
-
You need to sign the [contributor agreement](ContributorAgreement.pdf)
10
-
and send it to <info@elm-lang.org> before opening your pull request.
5
+
The Lamdera **compiler** is a free, open-source and open-contribution [un-fork of the Elm compiler](https://dashboard.lamdera.app/releases/open-source-compiler).
11
6
12
7
## Style Guide
13
8
14
-
* Haskell — conform to [these guidelines][haskell]
15
-
* JavaScript — use [Google's JS style guide][js]
If you're planning on embarking on a feature, come chat with us on the [Lamdera Discord](https://dashboard.lamdera.app/docs/discuss) as it's possible we're already working on it, or have some thoughts that will be helpful to get the best result and ensure it can be merged quickly.
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@ Elm is [a delightful language for reliable webapps](https://elm-lang.org/).
4
4
5
5
The Lamdera compiler extends the official Elm compiler with tooling that works for any regular Elm frontend project, as well as specific features for Elm projects on [Lamdera: A delightful platform for full-stack Elm web apps](https://lamdera.com).
6
6
7
-
The Lamdera **compiler** is free, open-source and open-contribution [un-fork of the Elm compiler](https://dashboard.lamdera.app/releases/open-source-compiler).
7
+
The Lamdera **compiler** is a free, open-source and open-contribution [un-fork of the Elm compiler](https://dashboard.lamdera.app/releases/open-source-compiler).
8
8
9
9
The Lamdera **platform** is a paid service with a free tier to try, and is how we keep our work funded and sustainable.
Copy file name to clipboardExpand all lines: extra/readme.md
+38-25Lines changed: 38 additions & 25 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,43 +9,31 @@ The integration philosophy is:
9
9
- Inject as small a surface area into actual compiler code as feasibly possible
10
10
- You'll see this done with certain tricks using `&` and `$` to, wherever possible, only add additional lines to source, without modifying any existing lines
11
11
- This means merge conflicts are minimized when trying to stay up to date with upstream Elm Compiler
12
-
- Sometimes entire functions are added to the bottom of files, usually when the current file defines a bunch of types that are needed and it's messier to have it external
12
+
- Sometimes entire functions are added to the bottom of core files, this is usually when the current file defines a bunch of types that are needed in the extension code, and it's problematic/messier to externalise that code and cause cyclic dependencies
13
13
14
14
The idea is that searching the project for `import.*Lamdera` and `@LAMDERA` will reveal every single `/builder` and `/compiler` core file that has some Lamdera related modification.
15
15
16
-
Alternatively the [diff of `master` and `lamdera` branches](https://github.com/lamdera/compiler/compare/master...lamdera) gives a nice overview of all modifications in the "Files Changed" view.
16
+
Alternatively the [diffing `elm/compiler` and `lamdera/compiler`](https://github.com/lamdera/compiler/compare/master...lamdera) gives a nice overview of all core file modifications in the "Files Changed" view.
17
17
18
18
Otherwise:
19
19
20
-
-Use Elm compiler source liberally inside `/extra`
20
+
-Reference/use Elm compiler source liberally inside `/extra`
21
21
- We don't want to reinvent the wheel on core compiler concepts, and can lean heavily on Haskell's type system to tell us when there are problems due to core type changes upstream in future
22
-
- Future developers might find things might seem obviously duplicated - if there's no comment and blame history is not helpful, it was likely accidental (didn't know compiler already had that functionality/code) or transient (i.e. features carried up from 0.19 over the years)
22
+
- Future developers might find things that might seem obviously duplicated - if there's no comment and blame history is not helpful, it was likely accidental (didn't know compiler already had that functionality/code) or transient (i.e. features carried up from 0.19 over the years)
23
23
24
24
If in doubt, please ask!
25
25
26
26
### Setup
27
27
28
-
```
29
-
brew install gcc pkg-config # some headers like 'linux/random.h' are implicitly required to build Haskell libs
30
-
brew install icdiff # used for nice side-by-side diffs in test output
31
-
git submodule init && git submodule update # Get and update Git submodules for this project
32
-
stack install hindent # used for debugging haskell values
33
-
```
34
-
35
-
36
-
### Tests
28
+
:warning: We'd like to move to `devbox` to make this a one-shot env setup in future; contributions welcome.
37
29
38
-
The `test` folder contains tests for aspects of the additional functionality. Most are at the acceptance test level, these have been the most useful so far.
39
-
40
-
The test framework is a very lightweight vendored copy of `EasyTest.hs`, defined entirely in that one file. There are some `test/Test/Helpers.hs` too.
:warning: The compiler tests need work, a few of them are not isolated (i.e they reach out into the world and expect things to exist).
86
+
87
+
The `test` folder contains tests for aspects of the additional functionality. Most are at the acceptance test level, these have been the most useful so far.
88
+
89
+
The test framework is a vendored copy of the very lightweight [`easytest`](https://github.com/joelburget/easytest) lib, defined entirely in that one file. There are some `test/Test/Helpers.hs` too.
`test/Test.hs` is the entrypoint for all tests. Use `Test.all` in ghci to run everything (it is also the `:rr` target by default).
100
+
`test/Test.hs` is the entrypoint for all tests. Use `Test.all` in ghci to run everything (it is also the `:rr` target by default, see notes above).
88
101
89
-
Using the test framework in `test/EasyTest`, a vendored version of [easytest](https://github.com/joelburget/easytest) back when it had fun emojis! It's only a single file and easy to read.
102
+
Using the test framework in `test/EasyTest`, a vendored version of back when it had fun emojis! It's only a single file and easy to read.
0 commit comments