package reason

  1. Overview
  2. Docs
Reason: Syntax & Toolchain for OCaml

Install

Dune Dependency

Authors

Maintainers

Sources

reason-3.12.0.tbz
sha256=63d950affbe203701a3d4c076a2750b56211bae7017cd8f59da508efb09a1afe
sha512=3ed24f4567dcf2ef2c05cec45fae18da2b9a78dab098a8e97e6430aaed4c8e3f659c7a5ccab88bce498c4b3d3cd54b01e72b2be4fefdf9f3bfcc2c8eb7fd86d4

CHANGES.md.html

3.12.0

  • Add \u{hex-escape} syntax (@anmonteiro, #2738)

  • Support local open and let bindings (@SanderSpies) #2716

  • outcome printer: change the printing of @bs.* to @mel.* (@anmonteiro, #2755)

  • Fix outcome printing of optional arguments on OCaml 5.2 (@anmonteiro, #2753)

  • support parsing and printing of external%extension (@anmonteiro, #2750, #2766, #2767)

  • install refmt manpage (@anmonteiro, #2760)

  • add support for parsing / printing of refutation clause in switch (@anmonteiro, #2765)

  • support let%ppx in signatures (@anmonteiro, #2770)

3.11.0

  • Print structure items extension nodes correctly inside modules (@anmonteiro, #2723)

  • Print wrapped type constraint on record patterns (@anmonteiro, #2725)

  • Support OCaml 5.2 (@anmonteiro, #2734)

3.10.0

  • Support @mel.* attributes in addition to @bs.* (@anmonteiro, #2721)

3.9.0

  • Reduce the amount of parentheses around functor usage (@SanderSpies, #2683)

  • Print module type body on separate line (@SanderSpies, #2709)

  • Fix missing patterns around contraint pattern (a pattern with a type annotation).

  • Fix top level extension printing

  • Remove the dependency on the result package, which isn't needed for OCaml 4.03 and above (@anmonteiro) #2703

  • Fix the binary parser by converting to the internal AST version used by Reason (@anmonteiro) #2713

  • Port Reason to ppxlib (@anmonteiro, #2711)

  • Support OCaml 5.1 (@anmonteiro, #2714)

3.8.2

  • Fix magic numbers for OCaml 5.0 (@anmonteiro) #2671

3.8.1

  • (Internal) Rename: Reason_migrate_parsetree -> Reason_omp (@ManasJayanth) #2666

  • Add support for OCaml 5.0 (@EduardoRFS and @anmonteiro) #2667

3.8.0

  • Add support for OCaml 4.13 (@EduardoRFS and @anmonteiro) #2657

  • Add support for OCaml 4.14 (@EduardoRFS and @anmonteiro) #2662

3.7.0

  • Add support for (limited) interop between letop + OCaml upstream (@anmonteiro) #2624

  • Add support for OCaml 4.12 (@kit-ty-kate) #2635

  • Remove support for OCaml 4.02.3 (@anmonteiro) #2638

3.6.2

New Feature, Non Breaking:

  • Reason Syntax v4 [NEW-FEATURE-NON-BREAKING]: Angle Brackets Type Parameters (PARSING) (@jordwalke)[#2604][https://github.com/facebook/reason/pull/2604]

Bug Fixes:

  • Fix printing of externals that happen to have newlines/quotes in them (@jordwalke)#2593

  • Fix parsing/printing of attributes on patterns (@jordwalke)#2592

  • Fix Windows CI (@ManasJayanth) #2611

  • Fix uncurry attribute on function application(@anmonteiro) #2566

  • Support OCaml 4.11 (@anmonteiro) #2582

  • Vendor ocaml-migrate-parsetree for greater compatibility (@jordwalke) #2623

Docs:

  • README Reason logo (@iamdarshshah)[#2609][https://github.com/facebook/reason/pull/2609]

3.6.0

New Feature, Non Breaking:

  • External syntax: make the external ... = "" part optional (@romanschejbal)#2464

    • external myFn: (string) => unit; is now equivalent to external myFn: (string) => unit = "";

Bug Fixes:

  • Fixes issues where method and similar keywords will be transformed to method_ (@cristianoc) #2530

3.5.4

Fixes:

  • Fix regression where keywords were not renamed correctly (@cristianoc) #2520

  • Fix regression where quoted object attributes / labeled arguments weren't renamed correctly (@anmonteiro) #2509

  • Fix issue where JSX braces break into multiple lines (@anmonteiro) #2503

Others:

  • Improve bspacks process for 4.06 and add esy workflow for building refmt.js

3.5.3

  • 🎉 MUCH better parsing error locations - more reliable autocomplete 🎉 (@let-def)[https://github.com/let-def] (#2439)

  • Rebased the better error recovery diff onto 4.09 OCaml @anmonteiro (#2480)

  • Fix printing of fragments inside JSX props @anmonteiro (#2463)

  • Modernize CI based on latest hello-reason CI @jordwalke (#2479)

  • Fix bug that caused necessary braces to be removed @anmonteiro (#2481)

  • Make prepublish script auto-generate opam files @jordwalke (#2468)

  • Fix brace removal with pipe-first in JSX attributes @bloodyowl (#2474)

  • CI Improvements @ulrikstrid (#2459)

  • Make sure you can still include rtop from inside utop @sync (#2466)

3.5.2

  • Support OCaml 4.09 (2450).

  • Improve opam packaging config (2431).

  • Improve repo to support esy resolutions to master branch (31225fc0

3.5.0

Improvements:

  • Support OCaml 4.08 (2426).

Fixes:

  • Print attributes in class fields 2414.

  • Preserve function body braces when Pexp_fun is an argument to a function commit

  • Prettify try to hug braces 2378

  • Fix operator swap for type declarations commit

  • Fix JSX removing semicolons commit

  • Better formatting of Pexp_lazy commit

3.4.2

Not released to @esy-ocaml/reason - would have required a major version bump. These features will be released in 3.5.0.

Improvements:

  • Parse and print parentheses around inline record declarations (2363)

  • Proper outcome printing (for editor and build) of inline records (2336)

  • Proper outcome printing of types with inline records (parentheses) (2370)

3.4.1

Fixes:

  • Don't remove semis in blocks inside ternary expressions as jsx children (2352).

  • Handle single line comments ending with end-of-file (2353).

3.4.0

Fixes:

  • Don't pun record types if they contain attributes (2316).

Improvements:

  • // line comments! (2268). Make sure that your constraints on refmt versions for native projects. Specify a version >= 3.4.0 if you use // comments in your Reason code. Specifiy ranges like 3.4.0-3.5.0.

  • Better whitespace interleaving (1990).

  • Allow Reason to be used with Merlin Natively on Windows (2256).

  • Improved Ternary Formatting (2294).

3.3.4

Fixes:

  • Pipe first braces (2133, 2148).

  • Better rtop use directives (2146, 2147).

  • foo(~Foo.a) becoming foo(~Fooa=Foo.a) (2136).

  • Parse <div> ...c</div> correctly (2137).

  • Invalid formatting of first-class module with type constraint (2151).

  • Precedence printing of pipe first with underscore sugar as JSX child (2159).

  • Correct location for JSX name & extension expression (2166, 2162).

  • Lack of space after module type of (2175).

  • Outcome printer (editor & interface generator) function signature (2185).

  • Precedence issue with unary operators and labeled arguments (2201).

  • Type printing of polymorphic variants row fields (2191).

  • Pattern parsing inside ternary expressions (2188).

Improvements:

  • Preserve empty lines in records and bs objects (2152).

  • Make let not = blabla work (not is a keyword) (2197).

  • Format doc comments on variant leafs with consistency (2194)

  • Single pipe first printing layout (2193).

  • Performance. One case where the printer took exponential time (2195).

3.3.3

  • More fixes for pipe first (2120, 2119, 2111).

  • Fix regressed printing of first-class module (2124).

  • Fix local open printing for bs.obj (2123).

  • fix printing of foo[(bar + 1)] to foo[bar + 1] (2110).

  • Only wrap fun in parentheses when necessary (2033).

  • Change all precedence printing to braces for consistency inside JSX (2106).

  • Format docblock comments above std attrs on record rows (2105).

3.3.2

Big release! No breaking change. Big shout out to @anmonteiro and @iwanKaramazow!

Major:

Others:

  • Parentheses hugging for multi-line Js.t({foo: bar}) (2074).

  • Correctly parse prefix ops in labeled parameters (2071).

  • Attach doc attributes before extension sugar (2069).

  • Support non-parenthesized label colon type equal optional in type declarations (2058).

  • Printf uncurried application when last argument is a callback (2064).

  • OCaml rtop syntax printing( 2031).

  • Fix Bigarray syntax (2045).

  • Parse M.[] (2043).

  • Fix printing of polymorphic variant with annotation (2019).

  • Format GADT type variants better (2016).

  • Better autocomplete for Merlin (1998).

  • Print newline after doc comments before attributes (1869).

  • Fix inconsistent printing of opening extension expressions (1979).

  • Fix error when parsing let x=-.1; and others (1945).

  • Arguments no longer accidentally punned when they carry attributes (1955).

3.2.0

See the blog post here.

  • WHITESPACES IMPROVEMENTS ARE HERE: empty lines between most things will now be preserved when you format your code! Multiple lines still collapse to one line in most cases (1921, 1919, 1876).

  • Semicolon relaxation: see blog post (1887).

  • Fix parsing & printing of es6 function syntax inside attributes (1943).

  • List spread now has better error (1925).

  • Functor in JSX tags (1927).

  • Better comment printing (1940, 1934).

  • Various other printer improvements.

3.1.0

  • New pipe sugar for function call argument in arbitrary position: foo |> map(_, addOne) |> filter(_, isEven) (1804).

  • BuckleScript [@bs] uncurry sugar: [@bs] foo(bar, baz) is now foo(. bar, baz). Same for declaration (1803, 1832).

  • Trailing commas for record, list, array, and everything else (1775, 1821)!

  • Better comments interleaving (1769, 1770, 1817)

  • Better JSX printing: <Foo bar=<Baz />>, <div><span></span></div> (1745, 1762).

  • switch now mandates parentheses around the value. Non-breaking, as we currently support parentheses-less syntax but print parens (1720, 1733).

  • Attributes on open expressions (1833).

  • Better OCaml 4.06 support (1709).

  • Extension points sugar: let%foo a = 1 (1703)!

  • Final expression in a function body now also has semicolon. Easier to add new expressions afterward now (1693)!

  • Better editor printing (outcome printer) of Js.t object types, @bs types, unary variants and infix operators (1688, 1784, 1831).

  • Parser doesn't throw Location.Error anymore; easier exception handling when refmt is used programmatically (1695).

3.0.4

  • Default print width is now changed from 100 to 80 (1675).

  • Much better callback formatting (1664)!

  • Single argument function doesn't require wrapping the argument with parentheses anymore (1692).

  • Printer more lenient when user writes [%bs.obj {"foo": bar}]. Probably a confusion with just {"foo": bar} (1659).

  • Better formatting for variants constructors with attributes (1668, 1677).

  • Fix exponentiation operator printing associativity (1678).

3.0.2

  • JSX: fix most of the parsing errors (#856 #904 1181 1263 1292)!! Thanks @IwanKaramazow!

  • In-editor syntax error messages are now fixed! They should be as good as the terminal ones (1654).

  • Polymorphic variants can now parse and print `foo(()) as `foo() (1560).

  • Variant values with annotations like Some((x: string)) can now be Some(x: string) (1576).

  • Remove few places remaining that accidentally print fun for functions (1588).

  • Better record & object printing (1593, 1596).

  • Fewer unnecessary wrappings in type declarations and negative constants (1616, 1634).

  • Parse and print attributes on object type rows (1637).

  • Better printing of externals with attributes (1640).

  • Better printing for multiple type equations in a module type in a function argument (1641).

  • Better printing for unary -. in labeled argument (1642).

3.0.0

Our biggest release! Please see our blog post on https://reasonml.github.io/blog/2017/10/27/reason3.html.

Summary: this is, practically speaking, a non-breaking change. You can mix and match two projects with different syntax versions in BuckleScript 2 (which just got release too! Go check), and they'll Just Work (tm).

To upgrade your own project, we've released a script, https://github.com/reasonml/upgradeSyntaxFrom2To3

Improvements:

  • Much better printing for most common idioms.

  • Even better infix operators formatting for ==, &&, > and the rest (1380, 1386, etc.).

  • More predictable keyword swapping behavior (1539).

  • BuckleScript's Js.t {. foo: bar} now formats to {. "foo": bar}, just like its value counterpart ([%bs.obj {foo: 1}] to {"foo": bar}.

  • [@foo], [@@foo] and [@@@foo] are now unified into [@foo] and placed in front instead of at the back.

  • ! is now the logical negation. It was not previously.

  • Dereference was !. Now it's a postfix ^.

  • Labeled argument with type now has punning!

  • String concat is now ++ instead of the old ^.

  • For native, Reason now works on OCaml 4.05 and the latest topkg (1438).

  • Record field punning for module field prefix now prints well too: {M.x, y} is {M.x: x, y: y}.

  • JSX needs {} like in JS.

  • Fix reason-specific keywords printing in interface files (e.g. ==, match, method).

  • Record punning with renaming (1517).

  • The combination of function label renaming + type annotation + punning is now supported!

  • Label is now changed from ::foo back to ~foo, just like for OCaml.

  • Fix LOTS of bugs regarding parsing & formatting (closing around 100 improvement-related issues!).

  • Official refmt.js, with public API. See README.md.

  • Official refmt native public API too.

  • New JS application/abstraction syntax. Yes yes, we know. Despite the 100+ fixes, this one's all you cared about. Modern software engineering ¯\_(ツ)_/¯. Please do read the blog post though.

Breaking Changes:

  • Remove --use-stdin and --is-interface-pp option from refmt; they've been deprecated for a long time now

  • Remove unused binaries: reup, etc.

  • Remove the old reactjs_jsx_ppx.ml. You've all been on reactjs_jsx_ppx_2.ml for a long time now.

  • Reserved keywords can no longer be used as an external declaration's labels.

Deprecated:

  • Deprecate --add-printers option from refmt; we'll have a better strategy soon.

1.13.7

  • Much better infix operators (e.g. |>) formatting! (1259)

  • Official refmt.js, with public API. See README.md. We've back-ported this into the 1.13.7 release =)

1.13.6

  • Changelog got sent into a black hole

OCaml

Innovation. Community. Security.