Skip to main content
Version: Next

LIGO Changelog

Release 0.63.0 and 0.63.1 don't exist. Use 0.63.2 directly

next

Run this release with Docker: docker run ligolang/ligo:next

Breaking :

  • Entrypoints parameter_of: new keyword for obtaining contract's (from module) parameter (!2476 by er433)

Added :

Fixed :

Details :

[breaking] Entrypoints parameter_of: new keyword for obtaining contract's (from module) parameter

A new keyword is introduced: parameter_of. It can be used to obtain the type of a contract (from a module/namespace):

namespace C {
type storage = int;
// @entry
const increment = (action: int, store: storage) : [list <operation>, storage] => [list([]), store + action];
// @entry
const decrement = (action: int, store: storage) : [list <operation>, storage] => [list([]), store - action];
};
const test_increment = (() => {
let initial_storage = 42;
let [taddr, _, _] = Test.originate_module(contract_of(C), initial_storage, 0 as tez);
let contr : contract<parameter_of C> = Test.to_contract(taddr);
let p : parameter_of C = Increment(1);
let _ = Test.transfer_to_contract_exn(contr, p, 1 as mutez);
return assert(Test.get_storage(taddr) == initial_storage + 1);
}) ();

As in the case of contract_of, now parameter_of becomes reserved. To still use parameter_of as an identifier, @ can be prepended.

[added] Enable attributes after keyword "export" for declarations

Attributes are now allowed after the keyword "export" on declarations.

[added] Disable declaration-shadowing warning on transpiled JsLIGO contracts

For a JsLIGO contracts with re-declared variables, like the following, with x re-declared :

const x = 42;
const x = 33;
const main = ([_action, store] : [int, int]) : [list <operation>, int] => {
return [
(list([]) as list <operation>), // No operations
store
]
};

Compilation will throw the following error :

> ligo compile contract 'transpile_warn_shadowing.jsligo'
File "transpile_warn_shadowing.jsligo", line 2, characters 10-12:
11 | const x = 42;
12 | const x = 33;
13 |
Cannot redeclare block-scoped variable.

Compilation using the --transpiled flag will disable the warning.

Before

> ligo compile contract 'transpile_warn_shadowing.jsligo' --transpiled
Error parsing command line:
unknown flag --transpiled
For usage information, run
ligo compile contract -help

After

> ligo compile contract 'transpile_warn_shadowing.jsligo' --transpiled
{ parameter int ; storage int ; code { CDR ; NIL operation ; PAIR } }

[fixed] Add support for attributes before namespace in jsligo parser

For a jsligo file

// @foo
export namespace D {
export type titi = int;
};
// @foo
namespace E {
export type titi = int;
export const toto = 42
};
/* @no_mutation */ export
const toto: D.titi = E.toto;

Before

$ ligo.62 print cst y.jsligo
File "y.jsligo", line 2, characters 7-16:
1 | // @foo
2 | export namespace D {
3 | export type titi = int;
Ill-formed export declaration.
At this point, a value or type declaration is expected.

After

$ ligo print cst y.jsligo
<ast>
├ Directive (y.jsligo:1:0-14)
├ PP_Linemarker (1, "y.jsligo", None)
├ SExport (y.jsligo:2:0-4:1)
├ SNamespace (y.jsligo:2:7-4:1)
<namespace> (y.jsligo:2:7-16)
<attributes>
|<attribute>
| └ private
...

[fixed] Resolve "Ligo 0.59.0+ breaks MR 2048 (Make [@annot:] mean no annotation)."

No details provided for this change. Please visit the MR to learn more


0.63.2

Run this release with Docker: docker run ligolang/ligo:0.63.2

Breaking :

Added :

Fixed :

Details :

[breaking] deprecation of mutate_ast

No details provided for this change. Please visit the MR to learn more

[added] Stdlib: filter_map function for Set

New function in module Set: val filter_map : ('a -> b option) -> 'a set -> 'b set.

[added] Add CLi option for PascaLIGO to JsLIGO syntax-level transpilation

No details provided for this change. Please visit the MR to learn more

[added] Stdlib: list updating functions

New functions in stdlib's List module: val filter_map : ('a -> 'b option) -> 'a list -> 'b list``val update : ('a -> 'a option) -> 'a list -> 'a list``val update_with : ('a -> 'a option) -> 'a -> 'a list -> 'a list

[added] Transpilation: add ad-hoc typers for map/big_map operations

No details provided for this change. Please visit the MR to learn more

[fixed][#1718][JsLIGO]: Fix automatic semicolon insertion for if-else statements

For a JsLIGO file like

export const foo = (b: bool) => {
if (b)
return 42
else
return 21
}

Before

$ ligo.62 compile expression jsligo foo --init-file y.jsligo
File "y.jsligo", line 2, characters 9-8:
1 | export const foo = (b: bool) => {
2 | if (b)
3 | return 42
Ill-formed conditional statement.
At this point, the statement executed when the condition is true is
expected.

After

$ ligo compile expression jsligo foo --init-file y.jsligo
{ IF { PUSH int 42 } { PUSH int 21 } }

[fixed] Errors: improve comparable error by showing the context type

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: better error managing when entrypoint is not annotated

No details provided for this change. Please visit the MR to learn more

[fixed] Fixed a transpilation error

No details provided for this change. Please visit the MR to learn more


0.62.0

Run this release with Docker: docker run ligolang/ligo:0.62.0

Breaking :

Added :

Fixed :

Internal :

Details :

[breaking] Attribute for entries

New attribute @entry allows to define entries for a module/namespace, or from the top-level of a file.

For example, the file contract.jsligo

type storage = int;
// @entry
const increment = (action: int, store: storage) : [list <operation>, storage] => [list([]), store + action];
// @entry
const decrement = (action: int, store: storage) : [list <operation>, storage] => [list([]), store - action];
// @entry
const reset = (_u: unit, _store: storage) : [list<operation>, storage] => [list([]), 0];

can be compiled directly:

$ ligo compile contract contract.jsligo
{ parameter (or (or (int %decrement) (int %increment)) (unit %reset)) ;
storage int ;
code { UNPAIR ;
IF_LEFT { IF_LEFT { SWAP ; SUB } { ADD } } { DROP 2 ; PUSH int 0 } ;
NIL operation ;
PAIR } }

Moreover, when using the testing framework, a contract_of keyword can be used to originate a module as a contract with the help of the new function Test.originate_module:

$ cat src/test/contracts/interpreter_tests/test_originate_module.jsligo
namespace C {
type storage = int;
// @entry
const increment = (action: int, store: storage) : [list <operation>, storage] => [list([]), store + action];
// @entry
const decrement = (action: int, store: storage) : [list <operation>, storage] => [list([]), store - action];
};
const test_increment = (() => {
let initial_storage = 42;
let [taddr, _, _] = Test.originate_module(contract_of(C), initial_storage, 0 as tez);
let contr = Test.to_contract(taddr);
let _ = Test.transfer_to_contract_exn(contr, (Increment (1)), 1 as mutez);
return assert(Test.get_storage(taddr) == initial_storage + 1);
}) ();
$ ligo run test src/test/contracts/interpreter_tests/test_originate_module.jsligo
Everything at the top-level was executed.
- test_increment exited with value ().

Breaking changes

Notice that this feature is breaking as contract_of becomes a keyword, rending invalid contracts that use this name as a variable. In this case, the fix is simple, and just amounts to change the name of the variable, or use @contract_of:

$ cat contract.jsligo
// @entry
const increment = (action: int, store: int) : [list <operation>, int] => [list([]), store + action];
const contract_of = 42;
$ ligo compile contract contract.jsligo
File "contract.jsligo", line 4, characters 6-17:
3 |
4 | const contract_of = 42;
Ill-formed value declaration.
At this point, a pattern is expected, e.g. a variable.

After modifying contract.jsligo with @contract_of:

$ cat contract.jsligo
// @entry
const increment = (action: int, store: int) : [list <operation>, int] => [list([]), store + action];
const @contract_of = 42;
$ ligo compile contract contract.jsligo
{ parameter int ;
storage int ;
code { UNPAIR ; ADD ; NIL operation ; PAIR } }

This MR also modifies the parameters for the sub-command evaluate-call (-e is not used anymore to signal the function to compile).

[added] Ligo is distributed through AUR for Arch linux

You can now install ligo through AUR

git clone https://aur.archlinux.org/ligo-bin.git
cd ligo-bin
makepkg -si

or

yay -S ligo-bin

[added][#1658] Support getting configuration from VSCode

Add support for decoding "maximum number of problems" and "verbosity" from the VS Code configuration.

[added][#1655] Fix and enable LSP formatting

Added support for document formatting request to ligo lsp.

[added] CLI: new -m parameter for module selection

A new argument is available when compiling a contract: -m, which allows to select a module path where the entrypoint (and views) is located.

Example file increment.jsligo

type storage = int;
type parameter =
["Increment", int]
| ["Decrement", int]
| ["Reset"];
type ret = [list<operation>, storage];
const add = (store : storage, delta : int) : storage => store + delta;
const sub = (store : storage, delta : int) : storage => store - delta;
namespace C {
const main = (action : parameter, store : storage) : ret => {
return [list([]) as list<operation>,
match (action, {
Increment:(n: int) => add (store, n),
Decrement:(n: int) => sub (store, n),
Reset :() => 0})]
};
}

Compilation using -m

$ ligo compile contract increment.jsligo -m C
{ parameter (or (or (int %decrement) (int %increment)) (unit %reset)) ;
storage int ;
code { UNPAIR ;
IF_LEFT { IF_LEFT { SWAP ; SUB } { ADD } } { DROP 2 ; PUSH int 0 } ;
NIL operation ;
PAIR } }

[fixed] Fix bugs in ligo publish

For a LIGO package with name @ligo/fa

Before

$ ligo.61 publish --dry-run
==> Reading manifest... Done
==> Validating manifest file... Done
==> Finding project root... Done
==> Packing tarball... An internal error ocurred. Please, contact the developers.
(Sys_error "/tmp/@ligo/fa675f7d1.0.1: No such file or directory").

After

$ ligo publish --dry-run
==> Reading manifest... Done
==> Validating manifest file... Done
==> Finding project root... Done
==> Packing tarball... Done
publishing: @ligo/fa@1.0.1
=== Tarball Details ===
name: @ligo/fa
version: 1.0.1
filename: @ligo/fa-1.0.1.tgz
package size: 36.4 kB
unpacked size: 249.5 kB
shasum: a1755ccfecb90d06440aef9d0808ec1499fc22f4
integrity: sha512-c986ef7bc12cd[...]9b6f8c626f8fba7
total files: 49

[fixed] Use js_of_ocaml's --enable=effects flag to fix stackoverflows

Fixes stackoverflows during Lexing in the browser

[fixed] Adds a js_of_ocaml setup with Dune and a PoC IDE to demo the bundle

No details provided for this change. Please visit the MR to learn more

[fixed] Make linearity checking apply inside modules

No details provided for this change. Please visit the MR to learn more

[internal] Prepare transpilation of PascaLIGO to JsLIGO

No details provided for this change. Please visit the MR to learn more


0.61.0

Run this release with Docker: docker run ligolang/ligo:0.61.0

Breaking :

Added :

Fixed :

Details :

[breaking][JsLIGO] Update syntax for generic functions

In JsLIGO, the syntax for defining generic functions was misleading.

This MR fixes this issue by adding the syntatic contruct to bind type variables in function expressions.

Before

const concat : <T>(xs : list<T>, ys : list<T>) => list<T> = (xs : list<T>, ys : list<T>) : list<T> => {
let f = ([x, ys] : [T, list<T>]) : list<T> => list([x, ...ys]);
return List.fold_right(f, xs, ys)
}

Before the type variables were bound in the LHS type annotation in the type expression.

After

const concat = <T>(xs : list<T>, ys : list<T>) : list<T> => {
let f = ([x, ys] : [T, list<T>]) : list<T> => list([x, ...ys]);
return List.fold_right(f, xs, ys)
}

After this change type variables can be bound in function expression like above.

[breaking] Deprecation of PascaLIGO

Deprecation of PascaLIGO.

[breaking] JsLIGO: abstractor generate curried definitions

Previously, multiparameter functions in JsLIGO were compiled to a function taking a tuple of parameters.

After this MR, multiparameter functions in JsLIGO are compiled to curried functions.

Contracts do still require taking a tuple (parameter, storage) (as in Michelson). However, LIGO will transform curried contracts to its uncurried form when using compile contract. The same is true for views, taking still tuples (argument, storage), but curried views will be uncurried automatically as well.

New functions are introduced at top-level:

val curry : ('a -> 'b -> 'c) -> ('a * 'b -> 'c)``val uncurry : ('a * 'b -> 'c) -> 'a -> 'b -> 'c For testing, Test.originate will take an curried contract of the form parameter -> storage -> operation list * storage. The old (uncurried) alternative is still available as Test.originate_uncurried.

[added][Chore] Add a changelog documenting the initial write of the LSP

Add a new subcommand (ligo lsp) whose purpose is to allow LSP clients (Visual Studio Code, Emacs, Vim, etc) to communicate with the new LIGO Language Server, which is being rewritten in OCaml. This command is not meant to be launched manually by users, but rather by editors. The rewrite was officially made in !2303.

The initial release supports diagnostics (errors only), go to definition, hover, rename (only in open files), references (only in open files), and type definition.

As the rewrite is new, it does not yet support feature parity with the old language server, and bugs are to be expected.

Other LSP features (hover, folding range, document link, warnings for diagnostics, prepare rename) have since been implemented in other merge requests.

Official support for the Vim, Emacs, and Visual Studio Code plugins will come soon, as well as the VS Code plugin release on the Marketplace and OpenVSX.

[added][#1648] Implement folding range for the LSP

Folding ranges allow the language server client to collapse or expand regions of code. Although some clients like Visual Studio Code can try to automatically deduce ranges based on regions, others like Emacs or Vim might not, so we implement the folding range requests from LSP in ligo lsp.

Added support for document link request to ligo lsp

[added] Extend JsLIGO nested update syntax

For a contract with nested record update using the new syntaxes, like below.

type storage = int;
type parameter = int;
const main = (_action: parameter, store: storage) : [ list<operation> , storage ] => {
let r = { x : { y : [ 1 , 2 , { z : "World" , z1 : 7 } , 3] } };
r["x"].y[2]["z"] = "Hello";
return [list([]), store]
};

Before

> ligo compile contract 'test.jsligo'
File "test.jsligo", line 6, characters 2-28:
5 | let r = { x : { y : [ 1 , 2 , { z : "World" , z1 : 7 } , 3] } };
6 | r["x"].y[2]["z"] = "Hello";
7 | return [list([]), store]
Not supported assignment.

After

> ligo compile contract 'test.jsligo'
{ parameter int ; storage int ; code { CDR ; NIL operation ; PAIR } }

[added][#1645]Hover upgrade

Improves behavior of LSP requests in case of modules. Adds syntax highlighting to hover request. Adds support for hover over modules

[added][#1652] Implement prepare rename request

Implements the prepare rename request from the LSP specification. It checks the validity of a rename so that users won't get a prompt for renaming lexemes such as a keyword (like let) or a built-in identifier (like int).

[added] Draft: Enable shorter JsLIGO syntax for nested record updates

For a contract with the new syntax for record update

type storage = int;
type parameter = int;
type user = {
id : int,
name : string
};
const user1 : user = {
id : 24,
name : "User1",
};
const main = (_action: parameter, store: storage) : [ list<operation> , storage ] => {
let p = user1;
p.id = 42; // Record field update
return [list([]), store]
};

Before

> ligo compile contract 'contract.jsligo'
File "contract.jsligo", line 17, characters 2-11:
16 | let p = user1;
17 | p.id = 42; // Record field update
18 | return [
Not supported assignment.

After

> ligo compile contract 'contract.jsligo'
{ parameter int ; storage int ; code { CDR ; NIL operation ; PAIR } }

[added] Stdlib: add is_none, is_some, value and value_exn in module Option

New functions available in module Option: val is_none : 'a option -> bool: returns a boolean signaling if the value is None.val is_some : 'a option -> bool: returns a boolean signaling if the value is a Some.val value : 'a -> 'a option -> 'a: returns the value if the second argument is wrapped in the Some constructor, or returns the first argument if it is None.val value_exn : 'e -> 'a option -> 'a: returns the value if the second argument is wrapped in the Some constructor, or fails with the first value if it is None.

Example

type foobar = option <int>;
const s : foobar = Some (42);
const n : foobar = None ();
const f = (m : foobar) : int => {
if (Option.is_none(m)) {
return Option.value(1, m);
} else {
if (Option.is_some(m)) {
return Option.value_exn("won't happen", m);
} else {
return -1;
}
}
}
const j = f(s);
const k = f(n);

j evaluates to 42, while k evaluates to 1.

[added] Small syntactic fixes to JsLIGO grammar to get closer to TS

Semicolons can now be used in describing objects (records), as well as commas. Discriminated unions can now have a leading vertical bar.

For a contract like

type planetType =
| { kind: "Tellurian" }
| { kind: "Gaseous" }
| { kind: "Other" };
type planet = {
name: string;
planetType: planetType;
lord: option<address>;
};
const main = (p: planet, _: int): [list<operation>, int] => {
let state = 0;
let planetType = p.planetType;
switch(planetType.kind) {
case "Tellurian":
state += 1;
break
case "Gaseous":
state -= 2;
break
case "Other":
state = 0;
break
}
return [list([]), state]
}

Before

$ ligo.59 compile contract y.jsligo
File "y.jsligo", line 2, characters 4-5:
1 | type planetType =
2 | | { kind: "Tellurian" }
3 | | { kind: "Gaseous" }
Ill-formed variant of a sum type.
At this point, one of the following is expected:
* attributes for the variant;
* an opening bracket '[' followed by a data constructor as a string.

After

$ ligo compile contract y.jsligo
{ parameter
(pair (pair (option %lord address) (string %name))
(or %planetType (or (unit %gaseous) (unit %other)) (unit %tellurian))) ;
storage int ;
code { CAR ;
PUSH int 0 ;
SWAP ;
CDR ;
IF_LEFT
{ IF_LEFT { DROP ; PUSH int 2 ; SWAP ; SUB } { DROP 2 ; PUSH int 0 } }
{ DROP ; PUSH int 1 ; ADD } ;
NIL operation ;
PAIR } }

[added] Support for compiling non-tail recursive functions

Now non-tail-recursive functions can be compiled. E.g.

$ cat lambdarec.mligo
let rec fib (n : int) : int =
if n <= 1 then
1
else
fib (n - 1) + fib (n - 2)
let rec cat (type a) (xs : a list) (ys : a list) : a list =
match xs with
| [] -> ys
| (x :: xs) -> x :: (cat xs ys)
$ ligo compile expression cameligo "cat [fib 1; fib 2; fib 3] [fib 4; fib 5; fib 6; fib 7]" --init-file lambdarec.mligo
{ 1 ; 2 ; 3 ; 5 ; 8 ; 13 ; 21 }

[fixed][#1683] Handle Is a directory error

No details provided for this change. Please visit the MR to learn more

[fixed] Fix condition for disabling colors in CLI output

Using flag --no-color in CI can be ignored if variable TERM is not set. Here a fix to make --no-color flag valid even if TERM is not defined.

[fixed] Fix: unused variables pass not taking into account E_mod_in

For a contract like

let fst (x, _) = x
let snd (_, x) = x
let main (_ : unit * nat ticket) : operation list * nat ticket =
let n = 10n in
module B = struct
let ticket = Option.unopt (Tezos.create_ticket n n)
let y = ticket, ticket
end in
[], Option.unopt (Tezos.join_tickets (fst B.y, snd B.y))

Before

ligo.60 compile contract y.mligo
File "y.mligo", line 6, characters 6-7:
5 | let main (_ : unit * nat ticket) : operation list * nat ticket =
6 | let n = 10n in
7 | module B = struct
:
Warning: unused variable "n".
Hint: replace it by "_n" to prevent this warning.
Error(s) occurred while type checking the contract:
Ill typed contract:
...

After

$ _build/install/default/bin/ligo compile contract y.mligo
File "y.mligo", line 8, characters 8-14:
7 | module B = struct
8 | let ticket = Option.unopt (Tezos.create_ticket n n)
9 | let y = ticket, ticket
:
Warning: variable "ticket" cannot be used more than once.
File "y.mligo", line 9, characters 4-26:
8 | let ticket = Option.unopt (Tezos.create_ticket n n)
9 | let y = ticket, ticket
10 | end in
:
Warning: variable "B.y" cannot be used more than once.
Error(s) occurred while type checking the contract:
Ill typed contract:
...

[fixed] Refactor Layout and Row to use rose trees

Fix problem regarding unification of layout in record/sum types.

[fixed][CameLIGO] Fix type variable binding in expressions

For a cameligo file like

let foo (type a) : a list -> a list =
let id = fun (type b) (xs : b list) : b list -> xs in
fun (xs : a list) : a list -> id xs
let main (_ : unit * int list) : operation list * int list =
[], foo [1 ; 2 ; 3]

Before

$ ligo.60 compile contract x.mligo
File "x.mligo", line 2, characters 31-32:
1 | let foo (type a) : a list -> a list =
2 | let id = fun (type b) (xs : b list) : b list -> xs in
3 | fun (xs : a list) : a list -> id xs
Type "b" not found.

After

$ ligo compile contract x.mligo
{ parameter unit ;
storage (list int) ;
code { DROP ;
NIL int ;
PUSH int 3 ;
CONS ;
PUSH int 2 ;
CONS ;
PUSH int 1 ;
CONS ;
NIL operation ;
PAIR } }

[fixed][#1666] Extract warnings from scopes

For the LIGO LSP, only errors were being displayed and warnings were skipped. Users will now be able to see warnings as well as errors.

[fixed] Fix: JsLigo attributes not propagated in the pipeline

For a contract like

type action_t =
// @layout:comb
| ["A"]
| ["B", int]
| ["C", [int, int]];
type storage_t =
// @layout comb
{
x: int,
y: int,
z: int
};
type return_t = [list<operation>, storage_t];
const main = (action: action_t, _: storage_t): return_t =>
[
list([]),
match(action, {
A: () => ({ x: 10, y: 10, z: 10 }),
B: (_) => ({ x: 20, y: 20, z: 20 }),
C: (_) => ({ x: 20, y: 20, z: 20 })
})
];

Before

$ ligo.60 compile contract y.jsligo
{ parameter (or (or (unit %a) (int %b)) (pair %c int int)) ;
storage (pair (pair (int %x) (int %y)) (int %z)) ;
code { CAR ;
IF_LEFT
{ IF_LEFT
{ DROP ; PUSH int 10 ; PUSH int 10 ; PUSH int 10 }
{ DROP ; PUSH int 20 ; PUSH int 20 ; PUSH int 20 } }
{ DROP ; PUSH int 20 ; PUSH int 20 ; PUSH int 20 } ;
PAIR ;
PAIR ;
NIL operation ;
PAIR } }

After

$ ligo compile contract y.jsligo
{ parameter (or (unit %a) (or (int %b) (pair %c int int))) ;
storage (pair (int %x) (int %y) (int %z)) ;
code { CAR ;
IF_LEFT
{ DROP ; PUSH int 10 ; PUSH int 10 ; PUSH int 10 }
{ IF_LEFT
{ DROP ; PUSH int 20 ; PUSH int 20 ; PUSH int 20 }
{ DROP ; PUSH int 20 ; PUSH int 20 ; PUSH int 20 } } ;
PAIR 3 ;
NIL operation ;
PAIR } }

[fixed] JsLIGO: add support for module access in type application

No details provided for this change. Please visit the MR to learn more

[fixed] fixing ligo info list-declarations

Fixing ligo info list-declarations for JsLIGO entrypoints

[fixed] CameLIGO: use params field when abstracting local types

No details provided for this change. Please visit the MR to learn more

[fixed] Testing framework: make run test --display-format json output the same JSON as Test.to_json

The output given by run test --display-format json is an array containing the name of the test entrypoint, followed by its value as a JSON (same format as Test.to_json, see API reference for further documentation on it). E.g.

$ cat display_format_json.mligo
let test_x =
let x = 42 in
x + 23
let test_y =
"hello"
$ ligo run test display_format_json.mligo --display-format json
[
[ "test_x", [ "constant", [ "int", "65" ] ] ],
[ "test_y", [ "constant", [ "string", "hello" ] ] ]
]

[fixed] Fix: Missing definitions from imported modules in get-scope

For ligo files with #imported modues

#import "y.mligo" "X"
let z = X.x.a

Before

$ ligo.59 info get-scope x_test.mligo --format dev --with-types
Scopes:
[ X#0 ] File "x_test.mligo", line 3, characters 8-13
Variable definitions:
(z#1 -> z)
Range: File "x_test.mligo", line 3, characters 4-5
Body Range: File "x_test.mligo", line 3, characters 8-13
Content: |unresolved|
references: []
Type definitions:
Module definitions:
(X#0 -> X)
Range: File "x_test.mligo", line 1, characters 7-8
Body Range: File "x_test.mligo", line 1, characters 11-36
Content: Alias: Mangled_module_y____mligo
references: File "x_test.mligo", line 3, characters 8-9

After

$ ligo info get-scope x_test.mligo --format dev --no-stdlib --with-types
Scopes:
[ X#4 Mangled_module_y____mligo#3 x#2 y#1 x#0 ] File "x_test.mligo", line 3, characters 8-13
[ x#0 ] File "y.mligo", line 3, characters 8-9
[ y#1 x#0 ] File "y.mligo", line 4, characters 14-15
[ y#1 x#0 ] File "y.mligo", line 4, characters 22-24
Variable definitions:
(z#5 -> z)
Range: File "x_test.mligo", line 3, characters 4-5
Body Range: File "x_test.mligo", line 3, characters 8-13
Content: |resolved: int|
references: []
Type definitions:
Module definitions:
(Mangled_module_y____mligo#3 -> Mangled_module_y____mligo)
Range:
Body Range:
Content: Members: Variable definitions:
(x#2 -> x)
Range: File "y.mligo", line 4, characters 4-5
Body Range: File "y.mligo", line 4, characters 8-25
Content: |resolved: x|
references: File "x_test.mligo", line 3, characters 8-13
(y#1 -> y)
Range: File "y.mligo", line 3, characters 4-5
Body Range: File "y.mligo", line 3, characters 8-9
Content: |resolved: int|
references: File "y.mligo", line 4, characters 14-15
Type definitions:
(x#0 -> x)
Range: File "y.mligo", line 1, characters 5-6
Body Range: File "y.mligo", line 1, characters 9-33
Content: : |record[a -> int , b -> string]|
references: []
Module definitions:
references: File "x_test.mligo", line 1, characters 11-36
(X#4 -> X)
Range: File "x_test.mligo", line 1, characters 7-8
Body Range: File "x_test.mligo", line 1, characters 11-36
Content: Alias: Mangled_module_y____mligo#3
references: File "x_test.mligo", line 3, characters 8-9

0.60.0

Run this release with Docker: docker run ligolang/ligo:0.60.0

Breaking :

Added :

Fixed :

Details :

[breaking] Remove remainder of ReasonLIGO (except debugger)

Remove remainder of ReasonLIGO from compiler, editor tooling, website, fuzzer, LSP, etc. But not the debugger.

[breaking] improve Jsligo proper return handling

Improve the return handling in JsLIGO

[added] Relax view restrictions under arrow types

Allow forbidden types in views when they occur under lambda/arrow types.

[added] add publication to AUR into release process

Ligo can be installed on archlinux through the Arch linux User repository. The artifact name is ligo-bin (https://aur.archlinux.org/packages/ligo-bin)

[added] ligo init templates & libraries from LIGO registry

New Feature

$ ligo init library --template @ligo/bigarray
Folder created: @ligo_bigarray
$ tree .
.
└── @ligo_bigarray
├── LICENSE
├── Makefile
├── README.md
├── examples
│ ├── main.mligo
│ └── package.json
├── lib
│ └── bigarray.mligo
├── package.json
└── test
└── bigarray.test.mligo
4 directories, 8 files

Before

$ ligo.59 init contract --template nft-factory-cameligo
Error: Unrecognized template
Hint: Use the option --template "TEMPLATE_NAME"
Please select a template from the following list:
- NFT-factory-cameligo
- NFT-factory-jsligo
- advisor-cameligo
...

After

$ ligo init contract --template nft-factory-cameligo
Cloning into 'nft-factory-cameligo'...
remote: Enumerating objects: 166, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 166 (delta 2), reused 7 (delta 2), pack-reused 149
Receiving objects: 100% (166/166), 216.51 KiB | 6.98 MiB/s, done.
Resolving deltas: 100% (63/63), done.
Folder created: nft-factory-cameligo

[added] Error checking for closure capturing big maps/operation/contract

Before fix

$ ligo compile expression cameligo "fun (x : operation) -> fun (y : int) -> x"
Error(s) occurred while checking the contract:
At (unshown) location 16, operation type forbidden in parameter, storage and constants

After fix

$ ligo compile expression cameligo "fun (x : operation) -> fun (y : int) -> x"
Invalid capturing, term captures the type operation.
Hint: Uncurry or use tuples instead of high-order functions.

[added] Implement String.concats and Bytes.concats in stdlib

New functions have been implemented for concatenating lists of strings and bytes: String.concats : string list -> string``Bytes.concats : bytes list -> bytes

[fixed] Resolve "Wrong references in ligo info get-scope"

For a ligo program like

let x = 42
let f x = 0
let g = x

Before

$ ligo.59 info get-scope x.mligo --format dev --with-types
Scopes:
[ ] File "x.mligo", line 1, characters 8-10
[ x#1 ] File "x.mligo", line 2, characters 10-11
[ f#2 x#0 ] File "x.mligo", line 3, characters 8-9
Variable definitions:
(f#2 -> f)
Range: File "x.mligo", line 2, characters 4-5
Body Range: File "x.mligo", line 2, characters 6-7
Content: |resolved: ∀ gen#563 : * . gen#563 -> int|
references: []
(g#3 -> g)
Range: File "x.mligo", line 3, characters 4-5
Body Range: File "x.mligo", line 3, characters 8-9
Content: |resolved: int|
references: []
(x#0 -> x)
Range: File "x.mligo", line 1, characters 4-5
Body Range: File "x.mligo", line 1, characters 8-10
Content: |resolved: int|
references: [] <---- The reference of top-level binding is not updated
(x#1 -> x)
Range: File "x.mligo", line 2, characters 6-7
Body Range: File "x.mligo", line 2, characters 10-11
Content: |resolved: gen#563|
references: File "x.mligo", line 3, characters 8-9 <---- The reference of local binding is updated :(
Type definitions:
Module definitions:

After

$ ligo info get-scope x.mligo --with-types --format dev
Scopes:
[ ] File "x.mligo", line 1, characters 8-10
[ x#1 ] File "x.mligo", line 2, characters 10-11
[ f#2 x#0 ] File "x.mligo", line 3, characters 8-9
Variable definitions:
(f#2 -> f)
Range: File "x.mligo", line 2, characters 4-5
Body Range: File "x.mligo", line 2, characters 6-7
Content: |resolved: ∀ gen#563 : * . gen#563 -> int|
references: []
(g#3 -> g)
Range: File "x.mligo", line 3, characters 4-5
Body Range: File "x.mligo", line 3, characters 8-9
Content: |resolved: int|
references: []
(x#0 -> x)
Range: File "x.mligo", line 1, characters 4-5
Body Range: File "x.mligo", line 1, characters 8-10
Content: |resolved: int|
references: File "x.mligo", line 3, characters 8-9 <---- The reference of level binding is updated correctly
(x#1 -> x)
Range: File "x.mligo", line 2, characters 6-7
Body Range: File "x.mligo", line 2, characters 10-11
Content: |resolved: gen#563|
references: []
Type definitions:
Module definitions:

[fixed] 🐛 Fix: Layout Unification

🐛 fix: layout unification.

[fixed] Add missing cases/fix wrong cases in tail recursiveness check

Example file

$ cat error_no_tail_recursive_function2.mligo
let rec foo (xs : int list) : int =
let rec loop (xs : int list) : int =
loop (foo xs :: xs)
in
loop xs

Before fix

$ ligo compile expression cameligo foo --init-file error_no_tail_recursive_function2.mligo
An internal error ocurred. Please, contact the developers.
Corner case: foo not found in env.

After fix

$ ligo compile expression cameligo foo --init-file error_no_tail_recursive_function2.mligo
File "error_no_tail_recursive_function2.mligo", line 3, characters 10-13:
2 | let rec loop (xs : int list) : int =
3 | loop (foo xs :: xs)
4 | in
Recursive call not in tail position.
The value of a recursive call must be immediately returned by the defined function.

[fixed] Improve error message when compiling functions which capture meta-LIGO types

Example file

$ cat test_capture_meta_type.mligo
type t = { x : int ; y : (unit, unit) typed_address }
let main ((_, _) : unit * unit) : operation list * unit = [], ()
let ta, _, _ =
Test.originate main () 0tez
let v = { x = 42 ; y = ta }
let w = v.x
let f = fun (_ : unit) -> v.x
let g = fun (_ : unit) -> f ()
let test = Test.eval g

Before fix

$ ligo run test test_capture_meta_type.mligo
File "test_capture_meta_type.mligo", line 16, characters 11-22:
15 |
16 | let test = Test.eval g
Cannot decompile value KT1KAUcMCQs7Q4mxLzoUZVH9yCCLETERrDtj of type typed_address (unit ,
unit)

After fix

$ ligo run test test_capture_meta_type.mligo
File "test_capture_meta_type.mligo", line 12, characters 26-27:
11 |
12 | let f = fun (_ : unit) -> v.x
13 |
Invalid usage of a Test type: typed_address (unit ,
unit) in record[x -> int , y -> typed_address (unit , unit)] cannot be translated to Michelson.

0.59.0

Run this release with Docker: docker run ligolang/ligo:0.59.0

Breaking :

Added :

Details :

[breaking] Remove ReasonLIGO tests and remove ReasonLIGO from CLI.

Remove ReasonLIGO tests and remove ReasonLIGO from CLI.

[breaking] Remove ReasonLIGO documentation.

No details provided for this change. Please visit the MR to learn more

[added] Extended the syntax of attributes

No details provided for this change. Please visit the MR to learn more


0.58.0

Run this release with Docker: docker run ligolang/ligo:0.58.0

Breaking :

Added :

  • [Package Management] Resolve main file when only the package name is provided in #import/#include (!2224 by melwyn95)
  • [PyLIGO] Standalone preprocessor, lexer and parser (!2210 by rinderkn)
  • Build ligo on Macos(intel), Linux and Windows and bundle into NPM tarball (!2200 by prometheansacrifice)
  • CLI: add a run test-expr to run expressions in test framework without need of a file (!2195 by er433)
  • Miscellaneous improvements for ligo-debugger-vscode (!2114 by tomjack)

Fixed :

Details :

[breaking] Set current protocol to Lima

By default, Lima protocol is used as current. This affects compilation of certain primitives (such as Tezos.create_ticket and contracts using chest, see changelog for Lima protocol introduction for more information).

Kathmandu can still be used passing the flag --protocol kathmandu.

[added][Package Management] Resolve main file when only the package name is provided in #import/#include

For a file like

#import "@ligo/bigarray" "BA"
let test = BA.concat [1 ; 2 ; 3] [4 ; 5 ; 6]

Before change

$ ligo.55 run test main.mligo
File "main.mligo", line 1, characters 0-29:
1 | #import "@ligo/bigarray" "BA"
2 |
File "@ligo/bigarray" not found.

After change

$ ligo run test main.mligo
Everything at the top-level was executed.
- test exited with value [1 ; 2 ; 3 ; 4 ; 5 ; 6].

[added][PyLIGO] Standalone preprocessor, lexer and parser

No details provided for this change. Please visit the MR to learn more

[added] Build ligo on Macos(intel), Linux and Windows and bundle into NPM tarball

Users can now install LIGO via NPM. npm i -g ligolang will install the Ligo compiler on Windows, Linux and MacOS (intel). https://www.npmjs.com/package/ligolang Also adds a GUI installer for Windows. Can be downloaded from here

[added] CLI: add a run test-expr to run expressions in test framework without need of a file

New sub-command can evaluate expressions directly in the testing framework:

$ ligo run test-expr cameligo "Test.log 42"
42
Everything at the top-level was executed.
- eval exited with value ().

[added] Miscellaneous improvements for ligo-debugger-vscode

Miscellaneous improvements for ligo-debugger-vscode

[fixed] Testing framework: issue with long tuples in matching

Example file

$ cat tuple_long.mligo
type big_tuple = int * int * int * int * int * int * int * int * int * int * int * int
let br : big_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
let f (x : big_tuple) =
match x with
| (x0, _x1, _x2, _x3, _x4, _x5, _x61, _x7, _x8, _x9, _x45, _x111) -> x0
let test = Test.assert (f br = 0)

Before fix

$ ligo run test tuple_long.mligo
File "tuple_long.mligo", line 9, characters 24-28:
8 |
9 | let test = Test.assert (f br = 0)
No pattern matched

After fix

$ ligo run test tuple_long.mligo
Everything at the top-level was executed.
- test exited with value ().

[fixed] 🐛 Fix: Type Variable Shadowing Error

Fixed type variable shadowing issues.

[fixed] Fix unresolved types in get-scope

For a file like

type user = {
is_admin : bool,
};
const alice : user = {
is_admin : true,
};
const alice_admin : bool = alice.i

Before fix

$ ligo.57 info get-scope y.jsligo --format dev --with-types
...
Variable definitions:
(alice#1 -> alice)
...
Content: |unresolved|
...
(alice_admin#2 -> alice_admin)
...
Content: |unresolved|
...
...

After fix

$ ligo info get-scope y.jsligo --format dev --with-types
...
Variable definitions:
(alice#1 -> alice)
...
Content: |core: user|
...
(alice_admin#2 -> alice_admin)
...
Content: |core: bool|
...
...

[fixed] Add --project-root for missing commands

Before:

$ ligo info list-declarations src/test/projects/include_include/main.mligo
File "src/test/projects/include_include/main.mligo", line 1, characters 0-41:
1 | #import "include-include/index.mligo" "M"
2 | #include "include-include/index.mligo"
File "include-include/index.mligo" not found.

After

$ ligo info list-declarations src/test/projects/include_include/main.mligo --project-root src/test/projects/include_include/
src/test/projects/include_include/main.mligo declarations:
main
hello

[fixed] JsLIGO: improve semicolon handling for #1511

Improve semicolon insertion after rbrace '}'.

[fixed] Resolve "Internal error: ligo compile storage"

Example file

$ cat annotated_storage_and_parameter.mligo
type storage = (int, int) map
type parameter = int list
let main ((_p, s) : parameter * storage) : operation list * storage =
([], s)

Before fix

$ ligo compile storage annotated_storage_and_parameter.mligo "Map.empty"
File "src/passes/14-spilling/compiler.ml", line 180, characters 36-43
corner case: For all type uncaught
Sorry, we don't have a proper error message for this error. Please report this use case so we can improve on this.

After fix

$ ligo compile storage annotated_storage_and_parameter.mligo "Map.empty"
{}

[fixed] Improve monomorphisation error message

Example file

$ cat annotate_arrow.mligo
let f (_:unit) (_:nat option) = None

After fix

$ ligo compile expression cameligo "f" --init-file annotate_arrow.mligo
File "annotate_arrow.mligo", line 1, characters 0-36:
1 | let f (_:unit) (_:nat option) = None
Cannot monomorphise the expression.
The inferred type was "unit -> ∀ a . option (nat) -> option (a)".
Hint: Try adding additional annotations.

[fixed] Fix missing semicolon before comments in jsligo

Improves the semi-colon insertion for jsligo

Example file

const test1 = 1
/* Hello */
// There
/* Hello */
// Again
const test2 = 2

Before Fix

$ ligo.57 run test y.jsligo
File "y.jsligo", line 6, characters 0-5:
5 | // Again
6 | const test2 = 2
Ill-formed top-level statement.
At this point, if the statement is complete, one of the following is
expected:
* a semicolon ';' followed by another statement;
* a semicolon ';' followed by the end of file;
* the end of the file.

After Fix

$ ligo run test y.jsligo
Everything at the top-level was executed.
- test1 exited with value 1.
- test2 exited with value 2.

0.57.0

Run this release with Docker: docker run ligolang/ligo:0.57.0

Added :

Fixed :

Details :

[added] Deliver beta for native Windows installation

The documentation to install ligo on windows is available here : https://ligolang.org/docs/next/intro/installation?lang=jsligo.

You can install it through NPM or through windows installer.

[added][Package Management] Improvements to ligo publish

Adds Support --dry-run flag to ligo publishBetter CLI report for ligo publishAdd validation before publishing packagesAdd support for .ligoignore file & Improve support for .ligorc file change in CLI report:

$ ligo publish --ligorc-path ./.ligorc
==> Reading manifest... Done
==> Validating manifest file... Done
==> Finding project root... Done
==> Packing tarball... Done
publishing: ligo-list-helpers@1.0.0
=== Tarball Details ===
name: ligo-list-helpers
version: 1.0.0
filename: ligo-list-helpers-1.0.0.tgz
package size: 895 B
unpacked size: 1.1 kB
shasum: 37737db2f58b572f560bd2c45b38e6d01277395d
integrity: sha512-a904c5af793e6[...]fc0efee74cfbb26
total files: 6
==> Checking auth token... Done
==> Uploading package... Done
Package successfully published

[fixed] Fix scopes for local types

function local_type (var u : unit) : int is {
type toto is int;
function foo (const b : toto) : toto is b
} with titi

In the above example the local type toto was missing in the scopes for body of foo and titi

[fixed] Update the templates list for ligo init & Imporve the error message

New templates via ligo init & Improved error messages for invalid template

Before:

$ ligo init contract
Template unrecognized please select one of the following list :
NFT-factory-cameligo
NFT-factory-jsligo
advisor-cameligo
dao-cameligo
dao-jsligo
multisig-cameligo
multisig-jsligo
permit-cameligo
randomness-cameligo
randomness-jsligo
shifumi-cameligo
shifumi-jsligo

After:

$ ligo init contract
Error: Unrecognized template
Hint: Use the option --template "TEMPLATE_NAME"
Please select a template from the following list:
- NFT-factory-cameligo
- NFT-factory-jsligo
- advisor-cameligo
- advisor-jsligo
- dao-cameligo
- dao-jsligo
- multisig-cameligo
- multisig-jsligo
- permit-cameligo
- permit-jsligo
- predictive-market-cameligo
- predictive-market-jsligo
- randomness-cameligo
- randomness-jsligo
- shifumi-cameligo
- shifumi-jsligo

[fixed] Fix ligo login when user is logged in and tries to login again with a different user

Before:

$ ligo.55 login
Username: user1
Password: ************
you are authenticated as 'user1'
$ ligo.55 login
Username: user2
Password: ***************
{
"error": "username is already registered"
}

After:

$ ligo login
Username: user1
Password: ************
you are authenticated as 'user1'
$ ligo login
Username: user2
Password: ***************
you are authenticated as 'user2'

[fixed] Fix compilation for negative integers

Improves the Michelson compilation for negative integers, removes the unnecessary NEG instruction in the case of negative integers

Before:

$ ligo.55 compile expression cameligo ' -100' --without-run
{ PUSH int 100 ; NEG }

After

$ ligo compile expression cameligo ' -100' --without-run
{ PUSH int -100 }

[fixed] Internal: remove cons_types from ppx

No details provided for this change. Please visit the MR to learn more

[fixed] Location Improvements

Location tracking improvements within the compiler

[fixed] Testing framework: fix sorting on decompilation/compilation of maps/sets

Example file

$ cat test_compare_setmap.mligo
let test_address_set =
let s : address set = Set.empty in
let s = Set.add ("tz1KeYsjjSCLEELMuiq1oXzVZmuJrZ15W4mv" : address) s in
let s = Set.add ("tz1TDZG4vFoA2xutZMYauUnS4HVucnAGQSpZ" : address) s in
let s : address set = Test.decompile (Test.eval s) in
Test.eval s

Before

$ ligo run test test_compare_setmap.mligo
Error(s) occurred while parsing the Michelson input:
At (unshown) location 0, value
{ "tz1TDZG4vFoA2xutZMYauUnS4HVucnAGQSpZ" ;
"tz1KeYsjjSCLEELMuiq1oXzVZmuJrZ15W4mv" } is invalid for type set address.
Values in a set literal must be in strictly ascending order, but they were unordered in literal:
{ "tz1TDZG4vFoA2xutZMYauUnS4HVucnAGQSpZ" ;
"tz1KeYsjjSCLEELMuiq1oXzVZmuJrZ15W4mv" }

After

$ ligo run test test_compare_setmap.mligo
Everything at the top-level was executed.
- test_address_set exited with value { "tz1KeYsjjSCLEELMuiq1oXzVZmuJrZ15W4mv" ;
"tz1TDZG4vFoA2xutZMYauUnS4HVucnAGQSpZ" }.

[fixed] Fix: Top-level recursive functions for cameligo

Fixes top-level recursive functions of the form let rec x = fun y -> ...

[fixed] Fix: check allowed chars in entrypoints

Example file

$ cat emit_bad_tag.mligo
let main (_,_ : unit * string ) : operation list * string =
[Tezos.emit "%hello world" 12], "bye"

Before

$ ligo compile contract emit_bad_tag.mligo
An internal error ocurred. Please, contact the developers.
Michelson_v1_printer.unparse.

After

$ ligo compile contract emit_bad_tag.mligo
File "emit_bad_tag.mligo", line 2, characters 3-31:
1 | let main (_,_ : unit * string ) : operation list * string =
2 | [Tezos.emit "%hello world" 12], "bye"
Invalid entrypoint "%hello world". One of the following patterns is expected:
* "%bar" is expected for entrypoint "Bar"
* "%default" when no entrypoint is used.
Valid characters in annotation: ('a' .. 'z' | 'A' .. 'Z' | '_' | '.' | '%' | '@' | '0' .. '9').

[fixed] Resolve "Internal error: tried to substitute for mutated var"

Example file

$ cat test_imm.ligo
type storage is int;
type return is list (operation) * storage
function reset (var s : storage) : storage is {
s := 0;
} with (s);
function main (const _action : unit; const s : storage) : return is
((nil : list (operation)), reset(s));
const test_orig = {
const (_typed_address, _, _) = Test.originate(main, 42, 0tez);
} with (Unit)

Before

$ ligo run test test_imm.ligo
An internal error ocurred. Please, contact the developers.
internal error, please report this as a bug: tried to substitute for mutated var File "src/passes/15-self_mini_c/subst.ml", line 317, characters 105-112.

After

$ ligo run test test_imm.ligo
Everything at the top-level was executed.
- test_orig exited with value ().

[fixed] testing framework: fixing decompile_value

Fix a bug where functional value couldn't be decompiled in the testing framework

[fixed] Testing framework: make Run use decompile_value (typed)

Example file

$ cat test_record.ligo
type internal_storage is [@layout:comb] record [
value : int;
]
type storage is record [
internal_storage : internal_storage;
]
const initial_storage: storage = record [
internal_storage = record [
value = 0;
];
];
const test_reproducing = {
Test.log(Test.eval(initial_storage));
} with ("OK")

Before

$ ligo run test test_record.ligo
Error(s) occurred while parsing the Michelson input:
At (unshown) location 0, value (Pair 0) is invalid for type int.
At (unshown) location 0, unexpected primitive, only an int can be used here.

After

$ ligo run test test_record.ligo
0
Everything at the top-level was executed.
- test_reproducing exited with value "OK".

[fixed] Add support for patterns in top-level declarations

Fix a bug where top-level let destructuring were causing code to be executed multiple time, as in:

let (a,a) =
let () = Test.log "hello" in
(1,2)

Fix a bug where type parameters were not found (https://gitlab.com/ligolang/ligo/-/issues/1482)proxy_tickets code has been changed (see https://ligolang.org/docs/advanced/testing/#transfers-and-originations-with-tickets)


0.56.0

Run this release with Docker: docker run ligolang/ligo:0.56.0

Added :

Fixed :

Performance :

Details :

[added] Goodbye gen 👋

Improve pretty-printing of types in errors by removing occurrences of gen#... variables.

[added] Testing framework: add Test.get_time to discover current time

New function in Test module:

val get_time : unit -> timestamp

It returns the current timestamp in the context of tests (similar to Tezos.get_now in contracts).

[added] Testing framework: extend comparison

The comparison functions (<, <=, etc.) now can work with variant types.

Example

Given the file test_compare.mligo:

type c = [@layout:comb] | B of int | A of string
type cl = c list
let test_cmp_list = Test.assert ([A "hello" ; A "bye"] > [A "hello" ; B 42])
Before this change
$ ligo run test test_compare.mligo
File "test_compare.mligo", line 4, characters 33-75:
3 |
4 | let test_cmp_list = Test.assert ([A "hello" ; A "bye"] > [A "hello" ; B 42])
"Not comparable"
After this change
$ ligo run test test_compare.mligo
Everything at the top-level was executed.
- test_cmp_list exited with value ().

[added] Diff of types in typer error messages

Feature description

The typer error message Cannot unify X with Y is now augmented with a diff between X and Y when those are tuples.

For example, here is a before/after of the error message for the following code :

let x : int * nat * int * nat * int * nat = 42 , 4n , 42 , 24n , 42 , 24n
let y : int * tez * string * nat * int * address * int * tez * nat = x

Before

Invalid type(s)
Cannot unify ( int * nat * int * nat * int * nat ) with ( int * tez * string * nat * int * address * int * tez * nat ).

After

Invalid type(s)
Cannot unify ( int * nat * int * nat * int * nat ) with ( int * tez * string * nat * int * address * int * tez * nat ).
Difference between the types:
int
+ tez
+ string
nat
int
- nat
+ address
int
+ tez
nat

[fixed] Add support for chain_id literal in Testing Framework

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: replace build_info with protocol version for ligo version

Before

$ ligo version
((build_time(1970-01-01 01:00:00.000000+01:00))(x_library_inlining false)(portable_int63 true)(dynlinkable_code false)(ocaml_version"")(executable_path"")(build_system""))
0.55.0

After

$ ligo version
Protocol built-in: lima
0.55.0

[fixed] fix byte extract

fix a bug where bytes literals extraction was not working happening in JsLIGO

[fixed] Testing framework: fix mutation in Michelson inlines

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: Send dependencies & devDependencies while publishing a package

Fixes bug in publising packages which have dependencies & devDependencies.

[fixed] Fix location for error message for PascaLIGO

Before change

$ ligo.55 compile contract x.ligo
Invalid type(s)
Cannot unify int with ( list (operation) * int ).

After change

$ ligo compile contract x.mligo
File "x.ligo", line 3, characters 71-72:
2 |
3 | function updateAdmin(const _new_admin: address; var s: int): return is s
4 |
Invalid type(s)
Cannot unify int with ( list (operation) * int ).

[fixed] Monomorphisation: add a better error message

Before change

$ cat monomorphisation_fail.mligo
let f (_ : unit) s = ([], s)
let main ((p, s) : unit * unit) : operation list * unit = f p s
$ ligo compile contract monomorphisation_fail.mligo
Internal error: Monomorphisation: cannot resolve non-variables with instantiations

After change

$ cat monomorphisation_fail.mligo
let f (_ : unit) s = ([], s)
let main ((p, s) : unit * unit) : operation list * unit = f p s
$ ligo compile contract monomorphisation_fail.mligo
File "monomorphisation_fail.mligo", line 3, characters 58-63:
2 |
3 | let main ((p, s) : unit * unit = f p s
Cannot monomorphise the expression.

[fixed] Fix: Package resolution from Docker containers

Fixes package resolution for LIGO when used via Docker container.

[fixed] Add check for non-comparable types under set and ticket

Before change

$ ligo compile contract not_comparable.mligo
Error(s) occurred while type checking the contract:
At (unshown) location 2, ill formed type:
1: { parameter (set (set int)) ;
2: storage unit ;
3: code { CDR ; NIL operation ; PAIR } }
At line 1 characters 17 to 25,
comparable type expected.Type set int is not comparable.

After change

$ ligo compile contract not_comparable.mligo
File "not_comparable.mligo", line 1, characters 21-28:
1 | let main ((_u, s) : (int set) set * unit) : operation list * unit = ([] : operation list), s
The set constructor needs a comparable type argument, but it was given a non-comparable one.

[fixed] Bugfix : Resolving module aliasing for nested modules

[performance] Internal: in tezos-ligo, lazify sapling_storage.ml's default_root

No details provided for this change. Please visit the MR to learn more

[performance] Optimizations on mutable variables

Apply michelson optimizations on mutable variables


0.55.0

Run this release with Docker: docker run ligolang/ligo:0.55.0

Breaking :

Fixed :

Details :

[breaking] Protocol update: Lima

Updated to Lima protocol for Michelson type-checking and testing framework. Main breaking changes are:

  • Deprecation of chest and Tezos.open_chest.
  • Change in Tezos.create_ticket to prevent the creation of zero valued tickets. Support for Jakarta has been removed. By default, we compile to Kathmandu. Type-checking for contracts use Kathmandu/Lima depending on --protocol passed, but for the rest of commands, protocol Lima is used (particularly, testing framework).

Example of Tezos.create_ticket change

Usage for protocol Kathmandu:

let ticket : ticket<string> = Tezos.create_ticket("one", 10 as nat);

Usage for protocol Lima:

let ticket : ticket<string> = Option.unopt(Tezos.create_ticket("one", 10 as nat));

[fixed] Fix: Detect cycles in #include paths and give proper error message

Before:

$ ligo.54 print preprocessed x.mligo
An internal error ocurred. Please, contact the developers.
("Stack overflow").

After

$ ligo print preprocessed x.mligo
File "x.mligo", line 1, characters 9-18:
1 | #include "y.mligo"
2 |
Error: Dependency cycle between:
-> "x.mligo"
-> "y.mligo"

[fixed] Fix #include for jsligo due to missing case in ASI

Fixes bug in #including jsligo files when semicolon is missing the last declaration of included file

Before:

$ ligo.54 run test b.jsligo
An internal error ocurred. Please, contact the developers.
("Simple_utils__Region.Different_files("b.jsligo", "a.jsligo")").

After:

$ ligo run test b.jsligo
Everything at the top-level was executed.
- test exited with value ().

[fixed] fixing E_for_each ctxt threading

Fix a bug where the typing of one for-loop could invalidate the typing of the next one

[fixed] Testing framework: subtraction of timestamps

No details provided for this change. Please visit the MR to learn more

[fixed] SLICE instruction in testing framework's interpreter

No details provided for this change. Please visit the MR to learn more

[fixed] NOT instruction in testing framework's interpreter

No details provided for this change. Please visit the MR to learn more

[fixed] Layout Unification

Add layout unification to LIGO's type checker, which fixes existing flaws in the propagation of layout annotations.


0.54.1

Run this release with Docker: docker run ligolang/ligo:0.54.1

Fixed :

Details :

[fixed][JsLIGO] Attributes can now occur before keyword "export".

No details provided for this change. Please visit the MR to learn more

[fixed] fixing timestamp decompilation

fixed decompilation of timestamp in LIGO test

[fixed] Do check removal of emit/entrypoint for expressions

No details provided for this change. Please visit the MR to learn more

[fixed] Use projections instead of matching in uncurried stdlib

No details provided for this change. Please visit the MR to learn more


0.54.0

Run this release with Docker: docker run ligolang/ligo:0.54.0

Breaking :

Added :

  • Testing framework: add option to remove default printing (!2075 by er433)

Fixed :

Internal :

Details :

[breaking] Make [@annot:] mean no annot

An empty annot attribute ([@annot:]) on record fields and variant cases now means that there will be no annot at all. Previously, it was ignored, and the field/case name would be used as usual.

[added] Testing framework: add option to remove default printing

Testing framework: allow disabling of default printing.

By default, LIGO's testing framework will print the values prefixed with test. Now it is possible to disable this output by using Test.unset_print_values : unit -> unit. It can be turned on again using Test.set_print_values : unit -> unit. The values prefixed with test will be printed or not at the end of execution, depending on which of these commands was executed last.

[fixed] Fixed the tokenisation of linemarkers

Fixed the tokenisation of linemarkers

[fixed][Package Management]: Fix bug in dependency resolution in ModRes

Fixes bug in resolution of external packages

[fixed] Load stdlib modules in list-declarations

No details provided for this change. Please visit the MR to learn more

[internal] Clean up: Record pattern Containers

No details provided for this change. Please visit the MR to learn more

[internal] Update tezos-ligo to v15.0-rc1

No details provided for this change. Please visit the MR to learn more

[internal] Frontend Pruning

Remove dead passes and code from the frontend

[internal] Michelson embedding with support of types and annotations

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: compile values directly

No details provided for this change. Please visit the MR to learn more

[internal] Ligo daemon: output x00 null char on stdout & stderr

No details provided for this change. Please visit the MR to learn more

[internal] Fix bug in JSON printer for errors

No details provided for this change. Please visit the MR to learn more


0.53.0

Run this release with Docker: docker run ligolang/ligo:0.53.0

Added :

Fixed :

Changed :

Internal :

Details :

[added] Cameligo punning

CameLIGO: add punning support for records.

[added] Testing framework: add assert alternatives in the Test module

New asserting primitives in the Test module

[added] Testing framework: add support for chain_id values

Added support for chain_id in the testing framework, now it can run Tezos.get_chain_id () successfully.

[added] Escaped identifiers example

Add an example of escaped identifiers.

[fixed] Remove calling preprocessor with ligo print pretty.

No details provided for this change. Please visit the MR to learn more

[fixed] Fix linearity check for patterns

Fix the check to detect duplicate bindinds in a pattern

[fixed] Assignment chaining

Fix for JsLIGO assignment chaining when tuples are used (see also: #1462)

[fixed] Revert InfraBot change for tezos-ligo version

No details provided for this change. Please visit the MR to learn more

[fixed] Mutable Let

Fix/improve LIGO's implementation of mutable features

[changed] Pattern Inference

Add pattern inference

[changed] CLI: upload more meta data points to registry: main and repository

No details provided for this change. Please visit the MR to learn more

[changed] Jsligo improve semicolon insertion

No details provided for this change. Please visit the MR to learn more

[internal] Refactor: fix type of Pattern.t

No details provided for this change. Please visit the MR to learn more

[internal] Upgrade Core to v0.15.0

Updated Core to the latest release

[internal] Punning left over

No details provided for this change. Please visit the MR to learn more

[internal] Refactor: move pattern matching compilation to ast-aggregated

No details provided for this change. Please visit the MR to learn more

[internal] JsLIGO: Pass ES6FUN token also when a syntax error occurs in the PreParser

JsLIGO: Pass ES6FUN token also when a syntax error occurs in the PreParser

[internal] Reintroduce operators for testing framework

No details provided for this change. Please visit the MR to learn more

[internal] add make install

No details provided for this change. Please visit the MR to learn more

[internal] Refactor: record patterns now hold labels & patterns in a map

No details provided for this change. Please visit the MR to learn more

[internal] Refactoring of the front-end (last iteration)

Fixed some bugs with the preprocessor and lexer.


0.52.0

Run this release with Docker: docker run ligolang/ligo:0.52.0

Added :

Fixed :

Changed :

Internal :

Details :

[added] Jsligo unreachable code

Give a warning when there's unreachable code in JsLIGO.

[added] JsLIGO: add ternary support .

  • JsLIGO: add ternary support

[added] Adds a package wrapped in esy

nix improvements

Add package that provides ligo with with esy. Usage: nix run gitlab:ligolang/ligo#withEsy -- install

[added] Jsligo discriminatory union

JsLIGO: Add support for discriminatory unions.

[added] Add raw bytes literal from string

Raw bytes representation from string

Raw bytes can be expressed directly from a string using [%bytes "..."]. E.g., [%bytes "foo"] represents bytes 0x666f6f.

[fixed] fix: contract not compiling in presence of meta-ligo terms

  • fix a regression where contract could not compile in presence of meta-ligo expressions (automatically remove such expressions)

[fixed] Testing framework: fixing decompilation of event payloads

Testing framework: fixing decompilation of event payloads

[fixed] Testing framework: untranspilable ticket in bigmap update

  • Testing framework: fix a bug where a ticket in a big_map was not transpilable

[fixed] Allow return in switch case.

Return in switch case now works properly.

[fixed] bugfix/module attribute deletion in aggregation

No details provided for this change. Please visit the MR to learn more

[changed] Improve JsLIGO docs

Reduce number of type annotations in JsLIGO examples in the documentation.

[changed] Match list no annotation

Remove the need for type annotations when using the match function over lists.

[changed] Jsligo destructure function params

JsLIGO: Tuple destructuring in parameters.

[changed] JsLIGO Object destructuring in parameters

Add support to destructure objects in function parameters.

[changed] JsLIGO: improve if .. else handling + allow "_" as arrow function argument.

Semicolon before else now allowed. Underscore is now allowed as arrow function argument.

[internal] Expect tests: cleanup

No details provided for this change. Please visit the MR to learn more

[internal] Jsligo support Foo.bar<int> syntax

No details provided for this change. Please visit the MR to learn more

[internal] Keep (context, expression) in Ast_aggregated for test purging

No details provided for this change. Please visit the MR to learn more

[internal] Import module syntax

No details provided for this change. Please visit the MR to learn more

[internal] Remove unused C_ASSERT_INFERRED

No details provided for this change. Please visit the MR to learn more

[internal] Add .ocamlformat Configurations

Add .ocamlformat configs to the compiler

[internal] JsLIGO: allow more in ternary expression

  • JsLIGO: allow more in ternary expression

[internal] Jsligo single arg

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: add int64 support

No details provided for this change. Please visit the MR to learn more

[internal] Remove reserved names pass

No details provided for this change. Please visit the MR to learn more


0.51.0

Run this release with Docker: docker run ligolang/ligo:0.51.0

Added :

Fixed :

Changed :

Performance :

Internal :

Details :

[added] Stdlib: add ignore

New ignore in stdlib

A new function ignore : type a . a -> unit allows to ignore values.

[added] Add List.find_opt to LIGO's Standard Library

Added List.find_opt to LIGO's standard library

[added] add brew formula into ligo monorepo

Add ligo installation through brew package manager. By using

brew tap ligolang/ligo https://gitlab.com/ligolang/ligo.git
brew install ligolang/ligo/ligo

You can also install one of the three last version by targeting the version after "@" :

brew install ligolang/ligo/ligo@0.49.0

[added] Jsligo for-loops on maps

No details provided for this change. Please visit the MR to learn more

[added] Execute ligo through NIX

Run nix run gitlab:ligolang/ligo to execute the last release of ligo binary through nix (arch x86_64-linux)

[added] Draft: New implementation of get-scope with support for modules

No details provided for this change. Please visit the MR to learn more

[added] Testing framework: add support for mutation in Test.originate_from_file functions

New functions for testing framework

There are new functions for doing mutation testing directly from files, that originate a mutated version of the contract and then gives control to the passed function that can do the test:

  • Test.originate_from_file_and_mutate : string -> string -> string list -> michelson_program -> tez -> (address * michelson_contract * int -> b) -> (b * mutation) option
  • Test.originate_from_file_and_mutate_all : string -> string -> string list -> michelson_program -> tez -> (address * michelson_contract * int -> b) -> (b * mutation) list

[added] Add a subcommand ligo daemon to be used only by tools like LSP server

  • add a daemon for ligo

[fixed] Fix: remove forced annotation in CameLIGO's abstractor

No details provided for this change. Please visit the MR to learn more

[fixed] Fix path issue in testing framwork for jsligo tests

No details provided for this change. Please visit the MR to learn more

[fixed][Testing Framwork] Fix relative path resolution for contracts

Fixes path resolution if a relative path is provided to Test.originate_from_file & Test.compile_contract_from_file & Test.read_contract_from_file

[fixed] regression layout

Fix regression in layout unification

[fixed] Fix tuple parameters passed to constant functions e.g. Tezos.call_view

No details provided for this change. Please visit the MR to learn more

[fixed] Jsligo preparser comma

No details provided for this change. Please visit the MR to learn more

[fixed] Fix JsLIGO preparser issue with colons.

No details provided for this change. Please visit the MR to learn more

[fixed] Monomorphisation: forall eta expand in monomorphisation

No details provided for this change. Please visit the MR to learn more

[fixed] Bugfix : nested for loop doesn't catch assignation effect correctly

Fixing bug with nested for loops in Pascaligo

[fixed] Fix the emission of recursive functions in JsLIGO tree abstractor

Fix the emission of recursive functions in JsLIGO tree abstractor

[fixed] Testing framework: perf. fix; compute error_type only when needed

No details provided for this change. Please visit the MR to learn more

[fixed] Fix view compilation for the case when a view uses another view

No details provided for this change. Please visit the MR to learn more

[fixed][Fix] Website responsive issue

Some blocks were cropped on small devices, so I fixed the responsive

[fixed] Bug Fix: Function Application in Bidirectional Type Checking

Bug fix for function application in bidirectional type checking

[changed] Update Documentation Removing Unnecessary Annotations

Update documentation removing unnecessary annotations

[changed] JsLIGO Remove Parser Requirement for Mandatory Parameter Annotations

Remove requirement that JsLIGO function parameters must be annotated

[changed] Bidirectional type checking for LIGO

Re-implement LIGO's type checker using bidirectional type checking.

[performance] Remi/bidir lib optim

Improve performance of compilation and typechecking

[internal] Add interface for Ligo_prim/Binder.ml

No details provided for this change. Please visit the MR to learn more

[internal] JsLIGO ES6FUN token

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: reuse layout from spilling pass

No details provided for this change. Please visit the MR to learn more

[internal] Move special constants to stdlib

No details provided for this change. Please visit the MR to learn more

[internal] Split Declaration module in ligo prim + Add ppx for fold and map

No details provided for this change. Please visit the MR to learn more

[internal] Stdlib: move C_..._LITERAL in

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: small internal clean-up

No details provided for this change. Please visit the MR to learn more

[internal] Remove C_OPTION_MAP from pseudomodules treatement

No details provided for this change. Please visit the MR to learn more

[internal] Refactor change common.

No details provided for this change. Please visit the MR to learn more


0.50.0

Run this release with Docker: docker run ligolang/ligo:0.50.0

Added :

Fixed :

Internal :

Details :

[added] Draft: Adding support for the reverse application operator |>

Added support for the reverse application operator |>

[fixed] Update type for SAPLING_VERIFY_UPDATE after Jakarta

No details provided for this change. Please visit the MR to learn more

[fixed] Better error mesage for incorrect contract type

No details provided for this change. Please visit the MR to learn more

[fixed] Fix ligo publish for big files

No details provided for this change. Please visit the MR to learn more

[internal] Add @thunk for forcing AST-level substitution

No details provided for this change. Please visit the MR to learn more

[internal] REPL: move from linenoise to lambda-term

No details provided for this change. Please visit the MR to learn more

[internal] Implement Subst for ast-aggregated

No details provided for this change. Please visit the MR to learn more

[internal] CLI: add no-stdlib flag

No details provided for this change. Please visit the MR to learn more


0.49.0

Run this release with Docker: docker run ligolang/ligo:0.49.0

Added :

Fixed :

Performance :

Internal :

Details :

[added] List decl improv

  • ligo info list-declarations now fail in case of a type error
  • ligo info list-declarations now accepts a flag --only-ep to only display declarations typed as an entrypoint (parameter * storage -> operation list * storage)

[fixed] Mutation testing: reduplication for mutation saving

No details provided for this change. Please visit the MR to learn more

[fixed] Perf: view fix

  • Performance: optimized compilation time for contracts

[fixed][Package Management] Fix: package tar-ball having absolute paths

Fix ligo publish in the case where --project-root is inferred

[performance][FIX] Improve the speed of compilation of views

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: implement mutation testing on top of try-catch

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: add internal function for try-with

No details provided for this change. Please visit the MR to learn more

[internal] Ligo Login: lookup env when not tty

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: simplify re-construction of environment

No details provided for this change. Please visit the MR to learn more

[internal] Monomorphisation: generate always different instances

No details provided for this change. Please visit the MR to learn more


0.48.1

Run this release with Docker: docker run ligolang/ligo:0.48.1

Added :

Fixed :

Details :

[added] Add manpages for login, add-user & publish

No details provided for this change. Please visit the MR to learn more

[fixed] Fix #import module not found

No details provided for this change. Please visit the MR to learn more


0.48.0

Run this release with Docker: docker run ligolang/ligo:0.48.0

Added :

  • update to kathmandu (2/2 : EMIT) (!1889 by lesenechal.remi)
  • [Testing Framwork] Add relative path resolution to Test.originate_from_file (!1879 by melwyn95)
  • Testing framework: add support for C_CONTRACT and similar (!1876 by er433)
  • [Package Management] Integrate ligo registry in CLI & Impl ligo publish, ligo login & ligo add-users in CLI (!1863 by melwyn95)
  • Testing framework : Documentation on ticket testing + support for decompilation of tickets to unforged tickets (!1725 by lesenechal.remi)

Fixed :

Changed :

Deprecated :

Internal :

Details :

[added] update to kathmandu (2/2 : EMIT)

[added][Testing Framwork] Add relative path resolution to Test.originate_from_file

Test.originate_from_file can now resolve paths relative to test file

[added] Testing framework: add support for C_CONTRACT and similar

Testing framework: support for Tezos.get_entrypoint_opt, Tezos.get_contract_opt and variants.

[added][Package Management] Integrate ligo registry in CLI & Impl ligo publish, ligo login & ligo add-users in CLI

Adds support for the new LIGO registry with the following commands

  1. publish [--registry URL] [--ligorc-path PATH] [--project-root PATH] publish the LIGO package declared in package.json
  2. add-user [--registry URL] [--ligorc-path PATH] create a new user for the LIGO package registry
  3. login [--registry URL] [--ligorc-path PATH] login to the LIGO package registry

[added] Testing framework : Documentation on ticket testing + support for decompilation of tickets to unforged tickets

  • [Testing framework] support for decompilation for tickets into unforged_tickets
  • [Testing framework] documentation about ticket testing

[fixed] Testing framework: Add support for decompiling key as bytes

No details provided for this change. Please visit the MR to learn more

[fixed] Draft: Mac Installation Instructions and Fixes

  • Added additional instructions for installing and building LIGO on MacOS.
  • Additionaly fixed reliance on $PATH for jsonschema in get_scope_tests by prefixing command with python3 -m.

[fixed] Re-introduce self_typing

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: scope of #import

The scope of #import directive has been fixed so that the imported module is created in-place instead of at the beginning of the file. (i.e won't be shadowed anymore by a module declared before the import)

[fixed] Aggregation: remove from the scope the variables locally bound

No details provided for this change. Please visit the MR to learn more

[fixed] Handle Big_map.get_and_update in test interpreter

Handle Big_map.get_and_update in testing framework

[fixed] Change handling of capitalization in Tezos.get_entrypoint_opt

Tezos.get_entrypoint_opt does not error anymore on the usage of a capitalized entrypoint.

[changed] Tezos upd v14

  • LIGO now depends on tezos v14

[changed] Try to infer --project-root when using ligo commands

Infer --project-root when using ligo commands

Now LIGO will try to infer --project-root by looking at parent directories, This will make LIGO CLI commands less verbose (when using external packages from npm).

If you need/want to specify the root directory of your project you can as always use the --project-root flag.

[deprecated] Remove thunked constants

Deprecated: Tezos.amount, Tezos.balance, Tezos.now, Tezos.sender, Tezos.source, Tezos.level, Tezos.self_address, Tezos.chain_id, Tezos.total_voting_power

[deprecated] Prepare Deprecate of Reasonligo

As ReasonLigo doesn't seem to have any advantages over Cameligo and JSligo and it seems that it is not used much. We decided to remove the support of the syntax, in order to focus our effort on other parts of the compiler. We have added a warning that we will leave for a few versions and remove ReasonLigo then.

[internal] Package management: Adds package author to metadata during publish

Here replace this sentence and put what you want to share with ligo users through changelog. Markdown formatted (#### for title). If you don't want to describe the feature remove keyword "Description details:"

[internal] Typer: keep type abstraction after checking

No details provided for this change. Please visit the MR to learn more

[internal] Draft: Decompile & pretty print patterns in error message

Better error messages for pattern matching anomalies


0.47.0

Run this release with Docker: docker run ligolang/ligo:0.47.0

Added :

Fixed :

Performance :

Internal :

Details :

[added] CLI Scaffolding feature

Initialize a new Ligo project from chosen template

This feature allow user to easily setup a new ligo project (Library or Contract) from template by adding new command-set into CLI.

Requirements

Feature use git so git cli have to be available.

Commands

ligo init -help

ligo init contract --template-list = print available template list to generate contract

ligo init contract <PROJECT> --template XXX = initialize folder with contract template XXX

ligo init library --template-list = print available template list to generate library

ligo init library <PROJECT> --template XXX = initialize folder with library template XXX

Additional details

[added] Add option --experimental-disable-optimizations-for-debugging

No details provided for this change. Please visit the MR to learn more

[fixed] Fix aggregation bug in loop

No details provided for this change. Please visit the MR to learn more

[fixed] Cleanup Agregation : replace dirty ref map with proper functional handling

fix a potential bug in the backend

[fixed] Draft: view compilation clean-up

  • Fixing potential bug related to view declaration shadowing

[fixed] Fix handling of @scoped/packages in ModRes

Fix handling for scoped npm packages

[performance] Optimize {PAIR n; UNPAIR n} and {UNPAIR n; PAIR n}

Optimize {PAIR n; UNPAIR n} and {UNPAIR n; PAIR n} to {}

[internal] Remove access_path in E_assign

No details provided for this change. Please visit the MR to learn more

[internal] Remove Bool from type list

No details provided for this change. Please visit the MR to learn more


0.46.1

Run this release with Docker: docker run ligolang/ligo:0.46.1

Fixed :

Details :

[fixed] fixing wild failwith

Fix a potential crash during the generation of type errors


0.46.0

Run this release with Docker: docker run ligolang/ligo:0.46.0

Added :

  • Testing framework: separate Test.log into printing and string conversion (!1809 by er433)
  • Testing framework: improvement on random generation and module PBT (!1799 by er433)

Fixed :

Changed :

Deprecated :

Internal :

Details :

[added] Testing framework: separate Test.log into printing and string conversion

New functions: Test.print, Test.println, Test.eprint, Test.to_string, Test.nl and Test.chr

These new functions provide more fine-grained printing.

val Test.print : string -> unit : prints an string to stdout.

val Test.println : string -> unit : prints an string to stdout, adding a newline at the end.

val Test.eprint : string -> unit : prints an string to stderr.

val Test.to_string : 'a -> string : turns a value of a given type into a string (internally using the same conversion as Test.log)

val Test.nl : string : a string containing only a newline.

Test.chr : nat -> string option : turns a nat in the range [0, 255] to an string consisting of only the corresponding char.

[added] Testing framework: improvement on random generation and module PBT

A new module Test.PBT

This new module is introduced to do simple property-based testing. It's composed of:

  • val gen : 'a gen: gives a generator for type 'a (must be annotated).
  • val gen_small : 'a gen: : gives a small generator for type 'a (must be annotated).
  • val make_test : 'a gen -> ('a -> bool) -> 'a pbt_test: creates a test from a generator and a property.
  • val run : 'a pbt_test -> nat -> 'a pbt_result: runs a test for a given number of tries. The introduced types are:
  • type 'a gen: represents a generator for a type.
  • type 'a pbt_test: represents a test for a type.
  • type 'a pbt_result = Success | Fail of 'a: represents the result of running a test.

[fixed] Testing framework: fix generator for nat/tez

No details provided for this change. Please visit the MR to learn more

[fixed] Fix abstractors for nested builtin submodules

No details provided for this change. Please visit the MR to learn more

[fixed] Fixing the scanning of escaped characters in strings

Until now escaped characters in strings were not properly scanned.

For instance, now the following constants

let _one = String.length """
let _two = String.length "
"
let _three = String.length ""

are accepted and evaluate in 1.

[fixed] Error if polymorphism is present after monomorphisation

Improve error message if polymorphism cannot be resolved

[changed] Pattern Matching: anomaly detection

Improve pattern matching anomaly (missing case / redundant case) error messages.

For missing cases:
type p = Four | Five | Six
type t = One of { a : int ; b : p } | Two | Three
let s (x : t) =
match x with
One { a ; b = Six } -> ()
| Two -> ()
| Three -> ()

Error:

File "../../test/contracts/negative//pattern_matching_anomalies/missing_cases/c_r_c.mligo", line 5, character 2 to line 8, character 29:
4 | let s (x : t) =
5 | match x with
6 | One { a ; b = Six } -> ()
7 | | Two -> ()
8 | | Three -> ()
Error : this pattern-matching is not exhaustive.
Here are examples of cases that are not matched:
- One({ a = _ ; b = Five })
- One({ a = _ ; b = Four })

For redundant case:
type t = One of int | Two of nat | Three
let s (x : t) =
match x with
One a -> ()
| Two c -> ()
| Three -> ()
| _ -> ()

Error:

File "../../test/contracts/negative//pattern_matching_anomalies/redundant_case/c1_c2_c3_w.mligo", line 8, characters 4-5:
7 | | Three -> ()
8 | | _ -> ()
Error : this match case is unused

[deprecated] Ithaca deprecation

Deprecation of --protocol ithaca

[internal] Improvement on Trace module

The compiler is now able to report all errors corresponding to the same step of compilation at the same time

[internal] Clean checking : add abstraction to avoid futur conflict and remove etection of polymorphic var

No details provided for this change. Please visit the MR to learn more

[internal] Clean up var module

No details provided for this change. Please visit the MR to learn more

[internal] mono file stdlib

rework of the standard library (might slightly improve compiler/tooling performances)

[internal] Change %external replacement

No details provided for this change. Please visit the MR to learn more


0.45.0

Run this release with Docker: docker run ligolang/ligo:0.45.0

Added :

Fixed :

Removed :

Internal :

  • Rewrite Coq pass: de Bruijn compiler with Michelson "strengthening" (!1666 by tomjack)
Details :

[added] Testing framework: add missing Test.drop_context

New Test function: drop_context

A new val Test.drop_context : unit -> unit in the testing framework is introduced. It allows to drop contexts from the context stack.

[added] Testing framework: add signing operation

New function Test.sign

A new function val sign : string -> bytes -> signature was added to sign data (represented as bytes) using a key (represented as a string).

[added] Testing framework: support getting secret key from bootstrap accounts

New Test function: get_bootstrap_account

The new function val get_bootstrap_account : nat -> address * key * string in Test retrieves the nth bootstrap account. Differently to nth_bootstrap_account, it also recovers the key and the secret key (represented as a string, similar to Test.new_account).

[added] Testing framework: Better control of time

testing framework: new function Test.reset_at (similar to Test.reset) which takes a timestamp and initialize the genesis block with a given timestamp

[fixed] Testing framework: keep order on bigmap receipts

No details provided for this change. Please visit the MR to learn more

[fixed] Docker image: make ligo executable for non-root users

Docker image: ligo now executable by non-root users inside container (e.g. when running docker with -u $(id -u):$(id -g).)

[fixed] Custom JSON output for types bool and option

No details provided for this change. Please visit the MR to learn more

[fixed] Compile parameter and storage types individually in views

No details provided for this change. Please visit the MR to learn more

[fixed] Testing framework: make Test.cast_address record type information

No details provided for this change. Please visit the MR to learn more

[fixed] Replace operations for operation in error message

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: Test.transfer_to_contract use entrypoint

No details provided for this change. Please visit the MR to learn more

[removed] Remove temp hack for PascaLIGO

No details provided for this change. Please visit the MR to learn more

[internal] Rewrite Coq pass: de Bruijn compiler with Michelson "strengthening"

No details provided for this change. Please visit the MR to learn more


0.44.0

Run this release with Docker: docker run ligolang/ligo:0.44.0

Breaking :

Added :

Fixed :

Changed :

Deprecated :

Internal :

Details :

[breaking] Testing framework: expose functions for contract compilation and origination

New Test type and functions

  • type michelson_contract: representing Michelson contracts.
  • Test.compile_contract_from_file : string -> string -> string list -> michelson_contract
  • Test.compile_contract : ('param * 'storage -> operation list * 'storage) -> michelson_contract
  • Test.read_contract_from_file : string -> michelson_contract
  • Test.originate_contract : michelson_contract -> michelson_program -> tez -> address
  • Test.size : michelson_contract -> int

Breaking changes in Test types, now they return michelson_contract instead of michelson_program:

  • Test.originate_from_file : string -> string -> string list -> michelson_program -> tez -> address * michelson_contract int
  • Test.originate : ('param * 'storage -> operation list * 'storage) -> 'storage -> tez -> (('param, 'storage) typed_address * michelson_contract * int)

Most usages ignore this result, but might break some tests in case they are too annotated.

[breaking] failwith now accepts arbitrary type as input

The failwith primitive now accepts arbitrary type as input.

breaking changes

failwith is now typed as forall a b . a -> b, instead of applying an ad-hoc rule giving unit as a default return type. In general, this will require more type annotations, as in:

let toplevel_failwith = failwith "I am failing" (* will not type anymore *)
let toplevel_failwith : unit = failwith "I am failing"
let f = fun (_ : unit) -> failwith (x + x + String.length y) (* will not type anymore *)
let f = fun (_ : unit) : unit -> failwith (x + x + String.length y)

Closes #193

[added] injectable cli expression

you can now pass an expression to ligo run test using command line option --arg, this value will be accessible through variable cli_arg

[added] Ligo native multi-platform

Use esy to build binary for :

  • Windows
  • Mac intel
  • Mac m1

[added] Multiplat builds with esy

No details provided for this change. Please visit the MR to learn more

[fixed] Fix record pattern matching when fields are not in the same order in all patterns

Fix record pattern matching when fields are not in the same order in all patterns

[fixed] jsligo: let bindings nested in a module would not be silently morphed into constants

fix a bug where top-level let declaration within a Jsligo Namespace wouldn't compile

[fixed] Testing framework: add inline attribute

No details provided for this change. Please visit the MR to learn more

[fixed] Bugfix, export let is not cast silently

No details provided for this change. Please visit the MR to learn more

[fixed] Typer context - Replace lists by maps

Closes(https://gitlab.com/ligolang/ligo/-/issues/1390)

[changed] Authorising () in function declarations and function calls.

Declarations function f () : t is b and calls f () are now valid.

[deprecated] Deprecate message for thunked constants in stdlib

Soon to be deprecated: Tezos.amount, Tezos.balance, Tezos.now, Tezos.sender, Tezos.source, Tezos.level, Tezos.self_address, Tezos.chain_id, Tezos.total_voting_power.

These should be replaced by their "thunked" counterpart, which are prefixed with get_. E.g. Tezos.balance : unit -> tez.

[internal] Remove E_type_in in typed and aggregated

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: add contract passes to contract in ast-aggregated

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: separate compilation from origination

No details provided for this change. Please visit the MR to learn more

[internal] Hashing for types (ast-typed)

No details provided for this change. Please visit the MR to learn more

[internal] Michelson optimization: factor out common last actions in conditionals

A new optimization has been added in contract compilation. By default, it will not use type information (for better compilation performance), but it can be enabled using --enable-michelson-typed-opt.


0.43.0

Run this release with Docker: docker run ligolang/ligo:0.43.0

Added :

Fixed :

Changed :

  • Testing framework: make Test.to_entrypoint remove the starting '%' (!1750 by er433)

Internal :

Details :

[added] Testing framework: implement other baking policies

New Test.set_baker_policy

There is a new Test.set_baker_policy : test_baker_policy -> unit that allows to set different baker policies as available in the testing helpers provided by the protocol. The type test_baker_policy is defined as the sum type:

type test_baker_policy =
| By_round of int
| By_account of address
| Excluding of address list

In particular, Test.set_baker addr is equivalent to Test.set_baker_policy (By_account addr).

[added][jsligo] function parameter destructuring, and let destructuring improvement

  • JSLIGO patterns in function parameters are now compiled to pattern matching, which improves the generated code in general
  • JSLIGO "let-destructuring" will now work on objects (record type) and arrays (tuple type) as in:
let destruct_tuple = (x : [ int , [int , nat] ]) : nat => {
let [a,[b,c]] = x ;
c
};
let destruct_record = (x : { a : int , b : string }) : int => {
let { a , b } = x ; (* Note: nested pattern in record are not yet available *)
a
};

[fixed] fix: --protocol jakarta emits SUB for mutez subtraction

  • --protocol jakarta now emits SUB_MUTEZ for subtraction mutez values

[fixed] pattern matching: some "inference"

  • improvement of pattern matching type-checking

[fixed] Stdlib: Add thunk attribute to Big_map.empty

No details provided for this change. Please visit the MR to learn more

[fixed] Improve running time after perfing

  • Testing framework: fix a potential bug where the current context wasn't used to evaluate Michelson code

[fixed] Update Hashlock and ID examples for the webide

No details provided for this change. Please visit the MR to learn more

[fixed] fixing lib cache

  • Fix a potential bug in standards libraries caching

[fixed] Restricted strings to 7-bit ASCII, as in Michelson.

Description details: Restricted strings to 7-bit ASCII, as in Michelson.

[fixed] Self_tokens: add semi-colon before export and namespace

No details provided for this change. Please visit the MR to learn more

[changed] Testing framework: make Test.to_entrypoint remove the starting '%'

By default, Test.to_entrypoint expected string argument not to begin with %. From now on, the starting '%' (if present) is removed.

[internal] Make Tezos.constant be a custom operator again

No details provided for this change. Please visit the MR to learn more

[internal] Remove C_LIST_HEAD_OPT / C_LIST_TAIL_OPT

No details provided for this change. Please visit the MR to learn more

[internal] Monomorphisation: add E_assign and E_lambda cases

No details provided for this change. Please visit the MR to learn more

[internal] Remove operations in testlib that can be implemented in terms of others

No details provided for this change. Please visit the MR to learn more

[internal] Using crunch to load library at compile-time

Using crunch to load standard libraries at compile-time

[internal] Remove operations that can be replaced in stdlib

No details provided for this change. Please visit the MR to learn more


0.42.1

Run this release with Docker: docker run ligolang/ligo:0.42.1

Added :

Details :

[added] Moving to jarkarta

upgrade to jakarta:

  • jakarta changes are available (please use option --protocol jakarta)

0.42.0

Run this release with Docker: docker run ligolang/ligo:0.42.0

Breaking :

Fixed :

Changed :

Internal :

Details :

[breaking] Remove deprecated constants

Deprecated constants

In previous versions of LIGO, warnings were emitted for deprecated constants (e.g. balance, sender, etc.). We finally remove those constants. Please consult API documentation in ligolang.org to find a new constant that can replace the old one in your contract.

[fixed][jsligo] Fix nested polymorphic functions

Fixed handling for nested generic functions in JsLIGO

const id : <P>(x : P) => P = (x : P) => {
const id_1 : <Q>(y : Q) => Q = (y : Q) => {
let id_2 : <R>(z : R) => R = (z : R) => {
let z = z;
return z;
};
let y = y;
return id_2(y);
}
return id_1(x);
};

[fixed] do not raise corner_case in pattern matching compression

fix detection of missing constructors in pattern matching

[fixed] Fix recursive functions when fun_name shadowed

Fixes bug in tail-call recursion check

[fixed] Fix: REPL support for stdlib

No details provided for this change. Please visit the MR to learn more

[fixed] Fix Tezos.call_view with impure

No details provided for this change. Please visit the MR to learn more

[changed] Better michelson typing error

contract failing to typecheck against protocol N while user did not use --protocol N will now only generate a warning

[internal] Remove auxiliar internal type map_or_big_map

No details provided for this change. Please visit the MR to learn more

[internal] Separate typing & pattern matching compilation

No details provided for this change. Please visit the MR to learn more

[internal] Push C_POLYMORPHIC_ADD/SUB selection towards the end of the pipeline

No details provided for this change. Please visit the MR to learn more

[internal] Add test parameter for print ast-typed/ast-aggregated

No details provided for this change. Please visit the MR to learn more

[internal] Remove test_exec_error/result

New type test_exec_error_balance_too_low

A new type test_exec_error_balance_too_low has been added to testing framework. It represents the data returned by Balance_too_low case in test_exec_error.

[internal] Prepare contracts for deprecation of constants

No details provided for this change. Please visit the MR to learn more

[internal] Refactor loop and assignation

Here put what you want to share with ligo users through changelog. Markdown formatted (#### for title).

Redesign the handling of imperative construct such as loop and assignation to fix bugs and improve performances

[internal] Value environment: standard library using %external

Breaking changes

  • Less lenient on the usage of Map and Big_map functions (e.g. Map.update will only work on maps and not on big_maps as before)

[internal] Change fail case when abstracting constants/built-in modules

No details provided for this change. Please visit the MR to learn more


0.41.0

Run this release with Docker: docker run ligolang/ligo:0.41.0

Added :

  • Testing framework: add support for context saving/restoring (!1695 by er433)
  • Global constants support in compile expression and additional support in parameter/storage (!1693 by er433)

Fixed :

Changed :

Internal :

Details :

[added] Testing framework: add support for context saving/restoring

New operations Test.save_context and Test.restore_context

  • Test.save_context : unit -> unit : takes current testing framework context and saves it, pushing it into a stack of contexts.
  • Test.restore_context : unit -> unit : pops a testing framework context from the stack of contexts, and sets it up as the new current context. In case the stack was empty, the current context is kept.

[added] Global constants support in compile expression and additional support in parameter/storage

The sub-command compile expression now supports --constant and --file-constants for using global constants.

[fixed] Fix option handling in michelson_to_value

  1. Fix bug in test interpreter related handling of option values
  2. Improve typing of records when type annotation is not provided

[fixed] fixing a bug in pattern_matching.ml substitution

Fix a bug related to recursive function definitions in pattern matching

[fixed] Testing framework: fix subtraction of timestamps

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: move Tezos.create_contract check of free variables to aggregated

No details provided for this change. Please visit the MR to learn more

[changed] Polymorphic types in jsligo and reasonligo

Here put what you want to share with ligo users through changelog.

Replace polymorphism syntax to have explicit polymorphic type "declaration"

[internal] Represent option as T_sum

No details provided for this change. Please visit the MR to learn more

[internal] Tree sitter grammar for jsligo

Tree sitter grammar for jsligo


0.40.0

Run this release with Docker: docker run ligolang/ligo:0.40.0

Added :

  • Testing framework: add support for loading files with global constants (!1681 by er433)
  • Add support for constants and file-constants in compile-parameter and compile-storage (!1677 by er433)
  • testing framework: change 'test_exec_error' type. It now has a special case for unsuficient balances, and case Other will return the tezos_client error (as a string) (!1576 by Rémi Lesénéchal)

Fixed :

Changed :

Internal :

Details :

[added] Testing framework: add support for loading files with global constants

Testing framework: add support for loading files with global constants

A new function Test.register_file_constants is introduced. It takes a string (file path) and returns a list of strings corresponding to the hashes of the registered constants.

The file format is the same as the used in --file-constants for sub-command compile contract.

[added] Add support for constants and file-constants in compile-parameter and compile-storage

Add support for global constants in compile storage and compile parameter

[added] testing framework: change 'test_exec_error' type. It now has a special case for unsuficient balances, and case Other will return the tezos_client error (as a string)

No details provided for this change. Please visit the MR to learn more

[fixed] Testing framework: fix recursive functions with multiple parameters

Recursive functions with multiple parameters were handled incorrectly in the testing framework. This change fixes the situation.

[fixed] Fix and docs about Test.random

Inference for Test.random fixed.

[fixed] Fix for naming issue when compiling more than 10 views (#1388)

Fixed naming issue when compiling more than 10 views (#1388).

[fixed] Add pretty-printing of type parameters in CameLIGO.

No details provided for this change. Please visit the MR to learn more

[fixed] Added pretty-printing of type parameters to CameLIGO.

No details provided for this change. Please visit the MR to learn more

[fixed] Better error when accessing a parametric type through a module

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: typo in message when compiling constant

No details provided for this change. Please visit the MR to learn more

[changed] Lifting redundant constructor restrictions

Lifting restrictions on redundant constructors

It is now possible to declare variant types sharing the same constructors as in:

type t1 =
| Foo of int
| Bar of string
type t2 =
| Foo of int
| Baz of nat

[changed] Testing framework: More reasons for better negative tests ?

The type of Test.test_exec_failure has changed: a new constructor Balance_too_low is added to assert that a contract pushed an operation but did not have enough fund.

[internal] Upgrade tezos-ligo submodule to v12.2

No details provided for this change. Please visit the MR to learn more

[internal] Fix zarith package conflict and add macstadium partnership

No details provided for this change. Please visit the MR to learn more

[internal] use substitution for evaluation of type applications

No details provided for this change. Please visit the MR to learn more

[internal] Generate textmate file to allow integrationwith linuist

No details provided for this change. Please visit the MR to learn more

[internal] Factored out a new syntactic category in the CST and beyond: module expressions. This will ease future developments on modules

No details provided for this change. Please visit the MR to learn more

[internal] Created the CST and AST nodes for module expressions.

No details provided for this change. Please visit the MR to learn more


0.39.0

Run this release with Docker: docker run ligolang/ligo:0.39.0

Fixed :

Internal :

Other :

Details :

[fixed] Fix: protocol_version check in predefined.ml

No details provided for this change. Please visit the MR to learn more

[fixed] Typer : Better locations

No details provided for this change. Please visit the MR to learn more

[fixed] Fixed the pretty-printing of punned record fields in ReasonLIGO (issue 1344).

No details provided for this change. Please visit the MR to learn more

[fixed] Fix typing rule of Test.mutation_test_all

No details provided for this change. Please visit the MR to learn more

[fixed] Fix a bug where views would be declared as module accesses

No details provided for this change. Please visit the MR to learn more

[fixed] Fix in typing for Tezos.get_contract_with_error

No details provided for this change. Please visit the MR to learn more

[fixed] Enable the check for reserved names again. It was removed unintentionally in the previous version

No details provided for this change. Please visit the MR to learn more

[fixed] Fix package path finding in ModRes + support package paths in REPL & Test interpreter

No details provided for this change. Please visit the MR to learn more

[internal] Update internal state of the typer

No details provided for this change. Please visit the MR to learn more

[internal] Fix: replace V.to_name_exn for V.pp in muchused

No details provided for this change. Please visit the MR to learn more

[internal] Remove T_abstraction from ast_aggregated

No details provided for this change. Please visit the MR to learn more

[internal] Docs: generate markdown manpages

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: clean-up interpreter's values internal comparator

No details provided for this change. Please visit the MR to learn more

[internal] Automated process for changelog generation and refactoring of the changelog structure

No details provided for this change. Please visit the MR to learn more

[other] merge language server changes in tooling into dev

No details provided for this change. Please visit the MR to learn more


0.38.1

Run this release with Docker: docker run ligolang/ligo:0.38.1

Details :

0.38.0

Run this release with Docker: docker run ligolang/ligo:0.38.0

Added :

  • Add deprecation warning for constants marked as deprecated (!1623 by er433)
  • Testing framework: new Test.register_constant and Test.constant_to_michelson_program to work with global constants (!1617 by er433)
  • [Ithaca] Command line option --protocol ithaca now allow users to use Ithaca specifics (!1582 by er433 & melwyn95)
  • Testing framework: Dropping support for Test.set_now LIGO 0.38.0 onwards. (!1582 by er433 & melwyn95)
  • [Ithaca] Support for Option.map - MAP instruction on option type. (!1582 by er433 & melwyn95)
  • [Ithaca] Subtraction operator emmits SUB_MUTEZ instruction when subtracting value of type tez. (!1582 by er433 & melwyn95)
  • Global constants: add compile constant sub-command (!1608 by er433)
  • Global constants: register global constants for compile-contract (!1603 by er433)
  • Website: Add Changelog link in header website & webide (!1602 by melwyn95)
  • Experimental support for source environment (bound variable) info with --michelson-comments env (!1521 by tomjack)

Fixed :

Internal :

Details :

[added] Add deprecation warning for constants marked as deprecated

No details provided for this change. Please visit the MR to learn more

[added] Testing framework: new Test.register_constant and Test.constant_to_michelson_program to work with global constants

No details provided for this change. Please visit the MR to learn more

[added][Ithaca] Command line option --protocol ithaca now allow users to use Ithaca specifics

No details provided for this change. Please visit the MR to learn more

[added] Testing framework: Dropping support for Test.set_now LIGO 0.38.0 onwards.

No details provided for this change. Please visit the MR to learn more

[added][Ithaca] Support for Option.map - MAP instruction on option type.

No details provided for this change. Please visit the MR to learn more

[added][Ithaca] Subtraction operator emmits SUB_MUTEZ instruction when subtracting value of type tez.

No details provided for this change. Please visit the MR to learn more

[added] Global constants: add compile constant sub-command

No details provided for this change. Please visit the MR to learn more

[added] Global constants: register global constants for compile-contract

No details provided for this change. Please visit the MR to learn more

No details provided for this change. Please visit the MR to learn more

[added] Experimental support for source environment (bound variable) info with --michelson-comments env

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: Raise error if typed_address is passes to Bytes.pack

No details provided for this change. Please visit the MR to learn more

[fixed] Website: Fix og image aspect ratio

No details provided for this change. Please visit the MR to learn more

[fixed] Disallow raw code which is not a function in testing framework

No details provided for this change. Please visit the MR to learn more

[fixed] Website: Use png for page metadata

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: Using REPL without the syntax argument

No details provided for this change. Please visit the MR to learn more

[fixed] Support old case syntax + mention as deprecated

No details provided for this change. Please visit the MR to learn more

[fixed] Compile only top-level views

No details provided for this change. Please visit the MR to learn more

[fixed] Rename recursive function calls when doing monomorphisation

No details provided for this change. Please visit the MR to learn more

[fixed] Aggregation: fix type when accessing a record inside a module accessing

No details provided for this change. Please visit the MR to learn more

[internal] Change constant typers to use LIGO types representation

No details provided for this change. Please visit the MR to learn more

[internal] Comments and examples for some of the Coq files

No details provided for this change. Please visit the MR to learn more


0.37.0

Run this release with Docker: docker run ligolang/ligo:0.37.0

Added :

Fixed :

Changed :

Internal :

Other :

Details :

[added] Docs: Update docs about Set.literal

No details provided for this change. Please visit the MR to learn more

[added] Testing framework: add instructions to register delegate and add baker accounts

No details provided for this change. Please visit the MR to learn more

[fixed] Website: Fix logo in docusaurus config

No details provided for this change. Please visit the MR to learn more

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: type instantiation bug when reusing same var.

No details provided for this change. Please visit the MR to learn more

[fixed] Fix unnecessary warning emitted from muchused check

No details provided for this change. Please visit the MR to learn more

[fixed] Fixed conversion of byte tokens to lexemes.

No details provided for this change. Please visit the MR to learn more

[fixed] Fixed pretty printing of constant constructors in type expressions.

No details provided for this change. Please visit the MR to learn more

[fixed] Testing framework: fix decompilation of chest and chest_key values: Test.get_storage will not perform correctly on those types

No details provided for this change. Please visit the MR to learn more

[fixed] Enabled attributes on type declarations.

No details provided for this change. Please visit the MR to learn more

[changed] Emit n-ary pair types pair a b c... for comb records

No details provided for this change. Please visit the MR to learn more

[internal] Refactor: compiler options

No details provided for this change. Please visit the MR to learn more

[internal] Refactor: Move type syntax to a common place

No details provided for this change. Please visit the MR to learn more

[internal] Update LIGO logo on website & webide.

No details provided for this change. Please visit the MR to learn more

[other] merge language server changes in tooling into dev

No details provided for this change. Please visit the MR to learn more


0.36.0

Run this release with Docker: docker run ligolang/ligo:0.36.0

Added :

Fixed :

Internal :

Other :

Details :

[added] Add voting_power & total_voting_power to test interpreter

No details provided for this change. Please visit the MR to learn more

[added] Update docs about adding alias for ligo on Linux/MacOS & Windows.

No details provided for this change. Please visit the MR to learn more

[added] Testing framework: add functions to register/generate (sk, pk) pairs for implicit addresses

No details provided for this change. Please visit the MR to learn more

[added] Testing framework: add support for Tezos.implicit_account

No details provided for this change. Please visit the MR to learn more

[added] Adding Tezos.voting_power and Tezos.total_voting_power

No details provided for this change. Please visit the MR to learn more

[fixed] Ligo test: fixing a bug where chest and chest_key values were not compiled correctly to michelson (their type were bytes instead of chest/chest_key)

No details provided for this change. Please visit the MR to learn more

[fixed] Fix locations for pattern matching - jsligo

No details provided for this change. Please visit the MR to learn more

[fixed] Testing framework: make type-checking run over aggregated program

No details provided for this change. Please visit the MR to learn more

[fixed] Testing framework: fix loop on embedded Michelson (#1356)

No details provided for this change. Please visit the MR to learn more

[fixed] Missing check for recursion function type

No details provided for this change. Please visit the MR to learn more

[fixed][PascaLIGO] Fixed how qualified names are parsed.

No details provided for this change. Please visit the MR to learn more

[fixed] fixed typo in PausableToken.ligo

No details provided for this change. Please visit the MR to learn more

[internal] Fix for-of & while loops - jsligo.

No details provided for this change. Please visit the MR to learn more

[internal] Improve representation of polymorphic function using big lambda

No details provided for this change. Please visit the MR to learn more

[internal] Update docs about LIGO gitpod environment

No details provided for this change. Please visit the MR to learn more

[internal] Tests for ModuleResolutions

No details provided for this change. Please visit the MR to learn more

[internal] rework Var Modules

No details provided for this change. Please visit the MR to learn more

[other] merge language server changes in tooling into dev

No details provided for this change. Please visit the MR to learn more

[other] merge language server changes in tooling into dev

No details provided for this change. Please visit the MR to learn more


0.35.0

Run this release with Docker: docker run ligolang/ligo:0.35.0

Added :

Fixed :

Changed :

  • Improve optimisation of some rare examples involving tuple/record destructuring (!1520 by tomjack)
  • Transpiler: change decompilation of (some) operators (!1508 by er433)

Performance :

Internal :

Details :

[added] Support curried recursive functions

No details provided for this change. Please visit the MR to learn more

[added] Testing framework: Test.transfer_* returns gas consumption

No details provided for this change. Please visit the MR to learn more

[added] Remove unused decls. (including potential Test. usages) when compiling parameter/storage

No details provided for this change. Please visit the MR to learn more

[added] Added Tezos.constant for protocol Hangzhou

No details provided for this change. Please visit the MR to learn more

[added] Docs for ligo package management

No details provided for this change. Please visit the MR to learn more

[added] Add support for package management to ligo using esy package manager

No details provided for this change. Please visit the MR to learn more

[fixed] Fix packages not getting installed via docker

No details provided for this change. Please visit the MR to learn more

[fixed] Testing framework: keep no_mutation in environment reconstruction

No details provided for this change. Please visit the MR to learn more

[changed] Improve optimisation of some rare examples involving tuple/record destructuring

No details provided for this change. Please visit the MR to learn more

[changed] Transpiler: change decompilation of (some) operators

No details provided for this change. Please visit the MR to learn more

[performance] Compilation: dramatically reduce compilation time when using views

No details provided for this change. Please visit the MR to learn more

[performance] Revert 1446

No details provided for this change. Please visit the MR to learn more

[internal] Remove generation of intermediary variable

No details provided for this change. Please visit the MR to learn more

[internal] Change opam lock file usage and add dependencies

No details provided for this change. Please visit the MR to learn more

[internal] PPX: add ppx-woo to stages 2, 3, 4, 5 and 6

No details provided for this change. Please visit the MR to learn more


0.34.0

Run this release with Docker: docker run ligolang/ligo:0.34.0

Added :

Fixed :

Internal :

Details :

[added] Testing framework: add Test.decompile primitive

No details provided for this change. Please visit the MR to learn more

[fixed] Fixing a bug where a contract compilation would fail because of views compilation with an obscure error message

No details provided for this change. Please visit the MR to learn more

[fixed] Test.run: add missing type-checking conditions

No details provided for this change. Please visit the MR to learn more

[fixed] testing framework: fix sets comparison

No details provided for this change. Please visit the MR to learn more

[fixed] Fixed regression in standalone preprocessor, lexers and parsers introduced when porting the code base from Stdlib to Core.

No details provided for this change. Please visit the MR to learn more

[fixed] Fix REASONLIGO LEFTOVER

No details provided for this change. Please visit the MR to learn more

[internal] Move ES6FUN token insertion to a pre-parser

No details provided for this change. Please visit the MR to learn more

[internal] Files cleaning

No details provided for this change. Please visit the MR to learn more

[internal] REPL: re-write internal state

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: interpreter re-written at ast_aggregated

No details provided for this change. Please visit the MR to learn more

[internal] New stage: ast_aggregated

No details provided for this change. Please visit the MR to learn more


0.33.0

Run this release with Docker: docker run ligolang/ligo:0.33.0

Added :

Fixed :

Internal :

  • Testing framework: add and fix primitives (Crypto.*, Set.remove, Option.unopt/Option.unopt_with_error, Tezos.pairing_check) (!1468 by er433)
Details :

[added] Add literals/negation for bls12_381_g1/g2/fr

No details provided for this change. Please visit the MR to learn more

[fixed] Add cases for decompilation of bls12_381_g1/g2/fr

No details provided for this change. Please visit the MR to learn more

[fixed] Fix CLI flag --library not splitting by comma

No details provided for this change. Please visit the MR to learn more

[fixed] Fix --lib and adding it for 'print preprocess'

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: add and fix primitives (Crypto.*, Set.remove, Option.unopt/Option.unopt_with_error, Tezos.pairing_check)

No details provided for this change. Please visit the MR to learn more


0.32.0

Run this release with Docker: docker run ligolang/ligo:0.32.0

Added :

  • Testing framework: add asserts in interpreter (!1463 by er433)
  • Testing framework: add support for Bytes.sub (!1462 by er433)
  • Webide: add examples for JsLIGO and re-enable increment examples for other languages (!1457 by er433)
  • Testing framework: add Test.random for generating values using QCheck (!1244 by er433)

Fixed :

Changed :

Performance :

Internal :

Details :

[added] Testing framework: add asserts in interpreter

No details provided for this change. Please visit the MR to learn more

[added] Testing framework: add support for Bytes.sub

No details provided for this change. Please visit the MR to learn more

[added] Webide: add examples for JsLIGO and re-enable increment examples for other languages

No details provided for this change. Please visit the MR to learn more

[added] Testing framework: add Test.random for generating values using QCheck

No details provided for this change. Please visit the MR to learn more

[fixed] fixing the "ad-hoc polymorphism" for pseudo-modules Map (working on maps and big maps)

No details provided for this change. Please visit the MR to learn more

[fixed] Fix compile storage & compile parameter (apply module morphing)

No details provided for this change. Please visit the MR to learn more

[changed] Fix typo in record access and record update error

No details provided for this change. Please visit the MR to learn more

[changed] Deprecated CLI is now removed. --infer flag has been dropped

No details provided for this change. Please visit the MR to learn more

[performance] Emit PAIR k for comb record construction

No details provided for this change. Please visit the MR to learn more

[internal] Build: remove -O3 from dune file

No details provided for this change. Please visit the MR to learn more

[internal] Print the order in which dependencies are built

No details provided for this change. Please visit the MR to learn more

[internal] Work around dune/coq bug (delete generated .ml)

No details provided for this change. Please visit the MR to learn more

[internal] Binaries: default build without ADX instructions

No details provided for this change. Please visit the MR to learn more

[internal] Ppx: apply ppx_map in combinators

No details provided for this change. Please visit the MR to learn more


0.31.0

Run this release with Docker: docker run ligolang/ligo:0.31.0

Added :

  • Test framework: add pack/unpack using Michelson interpreter (!1429 by er433)
  • Experimental: propagate source locations to Michelson with --michelson-comments location (!1251 by tomjack)

Fixed :

Performance :

  • Self mini_c optimizations: apply a single inline per round (!1446 by er433)

Internal :

Details :

[added] Test framework: add pack/unpack using Michelson interpreter

No details provided for this change. Please visit the MR to learn more

[added] Experimental: propagate source locations to Michelson with --michelson-comments location

No details provided for this change. Please visit the MR to learn more

[fixed] Fix type error for sapling_state inside a record

No details provided for this change. Please visit the MR to learn more

[fixed] ReasonLIGO: Improve handling of recursive arrows functions.

No details provided for this change. Please visit the MR to learn more

[fixed] Fix webide by adding correct file extension to temp files

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: simple polymorphism wrong interaction with module accessing

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: simple polymorphism; remember instances in lambda case

No details provided for this change. Please visit the MR to learn more

[performance] Self mini_c optimizations: apply a single inline per round

No details provided for this change. Please visit the MR to learn more

[internal] Re-do some reverted module inlining changes

No details provided for this change. Please visit the MR to learn more

[internal] Update tezos-ligo submodule to latest Hangzhou release

No details provided for this change. Please visit the MR to learn more

[internal] Transpilation: expected cases update

No details provided for this change. Please visit the MR to learn more

[internal] PPX: use ppx_construct in main_errors

No details provided for this change. Please visit the MR to learn more

[internal] Test case: add a test case for module env.

No details provided for this change. Please visit the MR to learn more

[internal] Add a script that checks for duplicate filenames

No details provided for this change. Please visit the MR to learn more


0.30.0

Run this release with Docker: docker run ligolang/ligo:0.30.0

Added :

Fixed :

Performance :

Internal :

Details :

[added] Fix typo in entrypoints-contracts.md

No details provided for this change. Please visit the MR to learn more

[added] Generate syntax highlighting for PascaLIGO

No details provided for this change. Please visit the MR to learn more

[added] Generate ReasonLIGO syntax highlighting for VIM, Emacs, VS Code

No details provided for this change. Please visit the MR to learn more

[added] Generate VSCode syntax highlighting for CameLIGO

No details provided for this change. Please visit the MR to learn more

[added] Generate CameLIGO Syntax Highlighting from definition in OCaml - Emacs + VIM

No details provided for this change. Please visit the MR to learn more

[added] Testing framework: update run so it runs in current tezos_context and port tzip12 tests to testing framework

No details provided for this change. Please visit the MR to learn more

[fixed] Fix 'ligo interpret' when working with polymorphic types

No details provided for this change. Please visit the MR to learn more

[performance] Performance: separate environments for "dummy" and "test"

No details provided for this change. Please visit the MR to learn more

[performance] Optimized compilation of modules

No details provided for this change. Please visit the MR to learn more

[internal] Bump menhir version

No details provided for this change. Please visit the MR to learn more

[internal] PPX: add ppx_poly_constructor for errors

No details provided for this change. Please visit the MR to learn more

[internal] PPX: generate constant''s tag, print and yojson

No details provided for this change. Please visit the MR to learn more

[internal] Tezos dep.: vendored version now points to a custom repo

No details provided for this change. Please visit the MR to learn more


0.29.0

Run this release with Docker: docker run ligolang/ligo:0.29.0

Added :

Fixed :

  • Fix: add case of GET_AND_UPDATE for Hangzhou (!1390 by er433)
  • Testing framework: fix order of receipt processing for big_maps (!1375 by er433)

Changed :

Performance :

  • Profiling and fixes: initialize dummy_environment only when needed (!1402 by er433)

Internal :

Details :

[added] Docs for Bytes

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: add case of GET_AND_UPDATE for Hangzhou

No details provided for this change. Please visit the MR to learn more

[fixed] Testing framework: fix order of receipt processing for big_maps

No details provided for this change. Please visit the MR to learn more

[changed] BuidSystem is now independent from the compiler

No details provided for this change. Please visit the MR to learn more

[performance] Profiling and fixes: initialize dummy_environment only when needed

No details provided for this change. Please visit the MR to learn more

[internal] Implement token wrapper to pass attributes

No details provided for this change. Please visit the MR to learn more

[internal] Update sed to fix Fmt not found (tezos-stdlib)

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: re-enable test for bigmap_set

No details provided for this change. Please visit the MR to learn more


0.28.0

Run this release with Docker: docker run ligolang/ligo:0.28.0

Added :

  • Docs for switch statement - jsligo (!1358 by melwyn95)
  • Tree abstraction for switch statements - jsligo (!1358 by melwyn95)
  • [Hangzhou] Testing framework: expose functions 'create_chest_and_chest_key' and 'create_chest_key' from Tezos crypto library (timelock) as 'Test.create_chest' and 'Test.create_chest_key' respectively (!1346 by Rémi Lesénéchal)
  • [Hangzhou] Testing framework: Test.originate_from_file now takes an additional list of top-level declaration for views (!1346 by Rémi Lesénéchal)
  • [Hangzhou] Command line option '--protocol hangzhou' now allow users to use hangzhou specifics (!1346 by Rémi Lesénéchal)
  • Testing framework: new primitive 'Test.cast_address' to cast an address to a typed_adress (!1346 by Rémi Lesénéchal)
  • [Hangzhou] support for on-chain views. Command line option '--views' and top-level declaration '[@view]' annotation (!1346 by Rémi Lesénéchal)
  • [Hangzhou] support for timelock. Types: chest; chest_key; chest_opening_result. Primitives: Tezos.open_chest (!1346 by Rémi Lesénéchal)
  • Docs: simple polymorphism (!1361 by er433)
  • Simple polymorphism: add support for simple polymorphism in the type-checking pass (!1294 by er433)

Fixed :

Changed :

Internal :

Other :

Details :

[added] Docs for switch statement - jsligo

No details provided for this change. Please visit the MR to learn more

[added] Tree abstraction for switch statements - jsligo

No details provided for this change. Please visit the MR to learn more

[added][Hangzhou] Testing framework: expose functions 'create_chest_and_chest_key' and 'create_chest_key' from Tezos crypto library (timelock) as 'Test.create_chest' and 'Test.create_chest_key' respectively

No details provided for this change. Please visit the MR to learn more

[added][Hangzhou] Testing framework: Test.originate_from_file now takes an additional list of top-level declaration for views

No details provided for this change. Please visit the MR to learn more

[added][Hangzhou] Command line option '--protocol hangzhou' now allow users to use hangzhou specifics

No details provided for this change. Please visit the MR to learn more

[added] Testing framework: new primitive 'Test.cast_address' to cast an address to a typed_adress

No details provided for this change. Please visit the MR to learn more

[added][Hangzhou] support for on-chain views. Command line option '--views' and top-level declaration '[@view]' annotation

No details provided for this change. Please visit the MR to learn more

[added][Hangzhou] support for timelock. Types: chest; chest_key; chest_opening_result. Primitives: Tezos.open_chest

No details provided for this change. Please visit the MR to learn more

[added] Docs: simple polymorphism

No details provided for this change. Please visit the MR to learn more

[added] Simple polymorphism: add support for simple polymorphism in the type-checking pass

No details provided for this change. Please visit the MR to learn more

[fixed] Testing framework: fix wrong env. reconstruction on mod. deps.

No details provided for this change. Please visit the MR to learn more

[fixed] Testing framework: support E_raw_code for functions

No details provided for this change. Please visit the MR to learn more

[fixed] Fix issue where writing multiple ifs could lead to disappearing code

No details provided for this change. Please visit the MR to learn more

[fixed] Fix ReasonLIGO inline tuple function argument

No details provided for this change. Please visit the MR to learn more

[fixed] Make JsLIGO export handling similar to JavaScript

No details provided for this change. Please visit the MR to learn more

[fixed] Fix record destructuring error reporting

No details provided for this change. Please visit the MR to learn more

[changed] update to ocaml 4.12.1

No details provided for this change. Please visit the MR to learn more

[internal] Use opam 2.1 in CI

No details provided for this change. Please visit the MR to learn more

[other] website: improve the download ligo page

No details provided for this change. Please visit the MR to learn more


0.27.0

Run this release with Docker: docker run ligolang/ligo:0.27.0

Added :

Fixed :

Changed :

Internal :

Details :

[added] JsLIGO: Add support for assignment operators: += /= *= -= %=

No details provided for this change. Please visit the MR to learn more

[added] Testing framework: add comparator for bigmaps

No details provided for this change. Please visit the MR to learn more

[added] Docs: new features on mutation

No details provided for this change. Please visit the MR to learn more

[added] testing framework: adding timestamp arithmetic in LIGO interpreter

No details provided for this change. Please visit the MR to learn more

[added] JsLIGO error messages

No details provided for this change. Please visit the MR to learn more

[fixed] fix a bug where _ patterns where not compiled to fresh variables

No details provided for this change. Please visit the MR to learn more

[fixed] fix a bug where a wrongly typed pattern was getting through the typechecker

No details provided for this change. Please visit the MR to learn more

[fixed] Fix List.fold_left in test interpreter

No details provided for this change. Please visit the MR to learn more

[fixed] Fix external modules bug in test interpreter

No details provided for this change. Please visit the MR to learn more

[fixed] Fix preprocessor not returning the #import path from #include

No details provided for this change. Please visit the MR to learn more

[fixed] Testing framework: internal replace of compare function

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: testing framework checks if current source is an implicit contract

No details provided for this change. Please visit the MR to learn more

[fixed] Fixes #1232 by make self_ast_imperative's map work with Declaration_module

No details provided for this change. Please visit the MR to learn more

[changed] CLI: add a wrapper message for failures

No details provided for this change. Please visit the MR to learn more

[internal] JsLIGO: keep attributes in let initializer

No details provided for this change. Please visit the MR to learn more

[internal] Use Topological Sort to solve the build dependency graph

No details provided for this change. Please visit the MR to learn more

[internal] Fix test file names e.g. a.mligo & A.mligo causes issues

No details provided for this change. Please visit the MR to learn more

[internal] Removed uses of vendor .opam in CI

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: add support for missing ops. on tez

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: add missing cases for iteration in JsLIGO (C_FOLD)

No details provided for this change. Please visit the MR to learn more

[internal] JsLIGO decompilation: quick fix for decompilation of expressions

No details provided for this change. Please visit the MR to learn more


0.26.0

Run this release with Docker: docker run ligolang/ligo:0.26.0

Added :

  • Add missing API functions to interpreter [List.fold_right, List.fold_left, List.head_opt, List.tail_opt, Set.fold_desc, Set.update, Map.get_and_update] (!1319 by melwyn95)
  • Testing framework: add steps bound (for timeout) (!1308 by er433)
  • Documentation of Preprocessor and LexerLib libraries. (!1306 by Christian Rinderknecht)
  • Testing framework: add attribute to mark non-mutable declarations (!1303 by er433)

Fixed :

Changed :

Removed :

  • testing framework: deprecates bootstrapped accounts support due to a problem in one of our tezos dependency, this feature will be enabled again in further updates (!1301 by Rémi Lesénéchal)

Internal :

Details :

[added] Add missing API functions to interpreter [List.fold_right, List.fold_left, List.head_opt, List.tail_opt, Set.fold_desc, Set.update, Map.get_and_update]

No details provided for this change. Please visit the MR to learn more

[added] Testing framework: add steps bound (for timeout)

No details provided for this change. Please visit the MR to learn more

[added] Documentation of Preprocessor and LexerLib libraries.

No details provided for this change. Please visit the MR to learn more

[added] Testing framework: add attribute to mark non-mutable declarations

No details provided for this change. Please visit the MR to learn more

No details provided for this change. Please visit the MR to learn more

[fixed] improves error locations on arguments in JsLigo

No details provided for this change. Please visit the MR to learn more

[fixed] JsLIGO: disallow variables with the same name in the same block to align with JS/TS

No details provided for this change. Please visit the MR to learn more

[fixed] JsLIGO: improve floating block scope handling

No details provided for this change. Please visit the MR to learn more

[fixed] ReasonLIGO: support functions without arguments

No details provided for this change. Please visit the MR to learn more

[changed] updating tezos dependencies to Granada (010-PtGRANAD)

No details provided for this change. Please visit the MR to learn more

[changed] Add assert_with_error funciton family

No details provided for this change. Please visit the MR to learn more

[removed] testing framework: deprecates bootstrapped accounts support due to a problem in one of our tezos dependency, this feature will be enabled again in further updates

No details provided for this change. Please visit the MR to learn more

[internal] Add all dependencies to opam.ligo (including dependencies required by vendored dependencies)

No details provided for this change. Please visit the MR to learn more

[internal] Use Dune for vendoring instead of Opam

No details provided for this change. Please visit the MR to learn more

[internal] Generate manpages for new-cli & rename ligo print preprocess to ligo print preprocessed

No details provided for this change. Please visit the MR to learn more

[internal] Tests: remove unused warnings

No details provided for this change. Please visit the MR to learn more


0.25.0

Run this release with Docker: docker run ligolang/ligo:0.25.0

Added :

Fixed :

Changed :

Performance :

  • improve performance of get-scope --with-types option by re-using the type environment instead of building a partial program (!1286 by Rémi Lesénéchal)

Internal :

  • Change remove_unused of self_ast_typed to search for free variables in module experssions & free module variables in expressions (!1295 by melwyn95)
  • Refactor: use Combinators.equal_value to compare record, list, set & map in interpreter (!1291 by melwyn95)
  • Nested value comparison in interpreter for list, set & map (!1274 by melwyn95)
  • Testing framework: improve environment reconstruction (module support) (!1289 by er433)
  • Testing framework: keep a local store for bigmaps (!1285 by er433)
  • Improve error message when type of contract can't be inferred (!1268 by melwyn95)
Details :

[added] Testing framework: add support for modules

No details provided for this change. Please visit the MR to learn more

[fixed] Removed syntax of tupls without parentheses as parameters.

No details provided for this change. Please visit the MR to learn more

[fixed] Extended syntax to support 'let x (type a) : 'a = x' etc.

No details provided for this change. Please visit the MR to learn more

[fixed] Add support for chained assignment

No details provided for this change. Please visit the MR to learn more

[changed] Remove JsLIGO new keyword

No details provided for this change. Please visit the MR to learn more

[changed] Modify Cli

No details provided for this change. Please visit the MR to learn more

[performance] improve performance of get-scope --with-types option by re-using the type environment instead of building a partial program

No details provided for this change. Please visit the MR to learn more

[internal] Change remove_unused of self_ast_typed to search for free variables in module experssions & free module variables in expressions

No details provided for this change. Please visit the MR to learn more

[internal] Refactor: use Combinators.equal_value to compare record, list, set & map in interpreter

No details provided for this change. Please visit the MR to learn more

[internal] Nested value comparison in interpreter for list, set & map

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: improve environment reconstruction (module support)

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: keep a local store for bigmaps

No details provided for this change. Please visit the MR to learn more

[internal] Improve error message when type of contract can't be inferred

No details provided for this change. Please visit the MR to learn more


0.24.0

Run this release with Docker: docker run ligolang/ligo:0.24.0

Added :

  • Testing framework: add support for re-generating files from mutation (!1214 by er433)

Fixed :

Changed :

Deprecated :

  • Deprecates Test.compile_expression Test.compile_expression_subst Test.mutate_expression Test.mutate_count (!1253 by Rémi Lesénéchal)

Internal :

  • Ast-typed pass: transform unused rec. to lambda (!1254 by er433)
  • Testing framework: fix for constant declaration, it does not need to evaluate anymore (!1269 by er433)
  • Docs: fix type signatures & examples for list, set & map (!1257 by melwyn95)
  • Testing framework: use ppx to check which operations correspond to it (!1258 by er433)
Details :

[added] Testing framework: add support for re-generating files from mutation

No details provided for this change. Please visit the MR to learn more

[fixed] Fixed bug in preprocessing #import

No details provided for this change. Please visit the MR to learn more

[fixed] Fix bitwise operators in interpreter

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: Test.originate now supports recursive functions

No details provided for this change. Please visit the MR to learn more

[fixed] JsLIGO: add support for tuple assignment

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: C_POLYMORPHIC_ADD resolution to C_CONCAT/C_ADD in JsLIGO

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: annotations are no long uncapitalized

No details provided for this change. Please visit the MR to learn more

[changed] Update to Florence 9.7

No details provided for this change. Please visit the MR to learn more

[deprecated] Deprecates Test.compile_expression Test.compile_expression_subst Test.mutate_expression Test.mutate_count

No details provided for this change. Please visit the MR to learn more

[internal] Ast-typed pass: transform unused rec. to lambda

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: fix for constant declaration, it does not need to evaluate anymore

No details provided for this change. Please visit the MR to learn more

[internal] Docs: fix type signatures & examples for list, set & map

No details provided for this change. Please visit the MR to learn more

[internal] Testing framework: use ppx to check which operations correspond to it

No details provided for this change. Please visit the MR to learn more


0.23.0

Run this release with Docker: docker run ligolang/ligo:0.23.0

Added :

Fixed :

Removed :

Internal :

Details :

[added] Sub-command compile-expression: add option for disabling running of compiled code

No details provided for this change. Please visit the MR to learn more

[added] Added attributes on lambdas.

No details provided for this change. Please visit the MR to learn more

[added] Front-end: Parameteric type expressions, polymorphic type and value definitions.

No details provided for this change. Please visit the MR to learn more

[added] The typechecking now understand parametric types

No details provided for this change. Please visit the MR to learn more

[added] Testing framework: a call trace is kept for giving context on failure

No details provided for this change. Please visit the MR to learn more

[added] Add bitwise operators for CameLIGO & ReasonLIGO

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: failure in REPL's exception handling

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: check that Bytes.unpack's annotated type is an option

No details provided for this change. Please visit the MR to learn more

[fixed] true/false in pattern matching are now forbidden (use True and False instead)

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: remove unused declarations before compiling

No details provided for this change. Please visit the MR to learn more

[fixed][PascaLIGO/CameLIGO] Rewrite of the parse error messages.

No details provided for this change. Please visit the MR to learn more

[fixed][PascaLIGO] Fixed pretty-printing.

No details provided for this change. Please visit the MR to learn more

[fixed] Suspend tail recursion analysis in E_module_accessor

No details provided for this change. Please visit the MR to learn more

[removed] Removed preprocessing directives #region and #endregion.

No details provided for this change. Please visit the MR to learn more

[internal] Fix: get_fv in self-ast-tyed/sef-ast-imperative

No details provided for this change. Please visit the MR to learn more

[internal][CameLIGO/ReasonLIGO/JsLIGO] Removed predefined constructors true and false.

No details provided for this change. Please visit the MR to learn more

[internal][PascaLIGO] Removed predefined constructors Unit, True and False.

No details provided for this change. Please visit the MR to learn more

[internal][PascaLIGO/CameLIGO/ReasonLIGO] Removed CST node TWild (standing for _).

No details provided for this change. Please visit the MR to learn more

[internal] Refactoring of the parsers, CSTs and printers.

No details provided for this change. Please visit the MR to learn more

[internal] JsLIGO: Fixed dangling else in the parser. Fixeds attributes on pattern variables and declarations.

No details provided for this change. Please visit the MR to learn more

[internal] Changed all Token.mll into Token.ml

No details provided for this change. Please visit the MR to learn more

[internal] All syntaxes: Removed predefined constructors Some and None.

No details provided for this change. Please visit the MR to learn more


0.22.0

Run this release with Docker: docker run ligolang/ligo:0.22.0

Added :

  • Contract pass: check entrypoint syntax in C_CONTRACT_ENTRYPOINT(_OPT) (!1223 by er433)

Fixed :

  • Fix: top-level underscore "definition" breaks testing framework (!1238 by er433)
  • Testing framework: fix overriding of variables on environment reconstruction (!1226 by er433)
  • Fix #1240: use annotations when checking Tezos.self (!1217 by er433)

Internal :

Details :

[added] Contract pass: check entrypoint syntax in C_CONTRACT_ENTRYPOINT(_OPT)

No details provided for this change. Please visit the MR to learn more

[fixed] Fix: top-level underscore "definition" breaks testing framework

No details provided for this change. Please visit the MR to learn more

[fixed] Testing framework: fix overriding of variables on environment reconstruction

No details provided for this change. Please visit the MR to learn more

[fixed] Fix #1240: use annotations when checking Tezos.self

No details provided for this change. Please visit the MR to learn more

[internal] Handling errors with exception

No details provided for this change. Please visit the MR to learn more

[internal] Clean up error handling in testing framework

No details provided for this change. Please visit the MR to learn more


0.21.0

Run this release with Docker: docker run ligolang/ligo:0.21.0

Fixed :

Internal :

Details :

[fixed] Trim warnings to not cause accidental error output.

No details provided for this change. Please visit the MR to learn more

[fixed] Fix editor extension page

No details provided for this change. Please visit the MR to learn more

[internal] Handling warnings as effect

No details provided for this change. Please visit the MR to learn more


0.20.0

Run this release with Docker: docker run ligolang/ligo:0.20.0

Added :

  • Add commands for mutating CST/AST, and primitives formutation in testing framework (!1156 by er433)

Fixed :

Changed :

Details :

[added] Add commands for mutating CST/AST, and primitives formutation in testing framework

No details provided for this change. Please visit the MR to learn more

[fixed] Transpiler: add parenthesis around typed pattern when decompiling CameLIGO

No details provided for this change. Please visit the MR to learn more

[fixed] Improve JsLIGO handling of attributes

No details provided for this change. Please visit the MR to learn more

[fixed] Properly support tuple accessors when using '+' operator.

No details provided for this change. Please visit the MR to learn more

[changed] Improved ReasonLIGO syntax highlighting

No details provided for this change. Please visit the MR to learn more

[changed] JsLIGO: Don't require 'return' before 'failwith'

No details provided for this change. Please visit the MR to learn more


0.19.0

Run this release with Docker: docker run ligolang/ligo:0.19.0

Added :

Fixed :

Changed :

  • Changes in the testing framework: Test.originate, Test.transfer(_exn), Test.to_contract, Test.to_entrypoint, Test.get_storage, Test.get_balance, Test.eval, initial support for big_maps (!1169 by @er433)
Details :

[added] Add support for NEVER instruction as Tezos.never

No details provided for this change. Please visit the MR to learn more

[fixed] Fix type-checker bug when using let-destructuring with a unit pattern

No details provided for this change. Please visit the MR to learn more

[fixed] REPL: fix evaluation of JsLIGO expressions and add test cases

No details provided for this change. Please visit the MR to learn more

[changed] Changes in the testing framework: Test.originate, Test.transfer(_exn), Test.to_contract, Test.to_entrypoint, Test.get_storage, Test.get_balance, Test.eval, initial support for big_maps

No details provided for this change. Please visit the MR to learn more


0.18.0

Run this release with Docker: docker run ligolang/ligo:0.18.0

Fixed :

Deprecated :

  • Deprecated evaluate-value (now evaluate-expr) and run-function (now evaluate-call) (!1131 by Suzanne Soy)

Internal :

  • X_options maintenance (!1155 by @SanderSpies)
  • Improved review/refactor script (look for code quality marker, ignore tools/webide, show some info about why a file is at this position in the queue) (!1136 by Suzanne Soy)
Details :

[fixed] fix a bug where Test.get_storage was not usable within a Test.compile_expression_subst

No details provided for this change. Please visit the MR to learn more

[deprecated] Deprecated evaluate-value (now evaluate-expr) and run-function (now evaluate-call)

No details provided for this change. Please visit the MR to learn more

[internal] X_options maintenance

No details provided for this change. Please visit the MR to learn more

[internal] Improved review/refactor script (look for code quality marker, ignore tools/webide, show some info about why a file is at this position in the queue)

No details provided for this change. Please visit the MR to learn more


0.17.0

Run this release with Docker: docker run ligolang/ligo:0.17.0

Added :

  • New pass enforcing: consts cannot be assigned to, vars cannot be captured. (!1132 by @er433)
  • Added syntactic support for tuples without parentheses at the top-level of patterns in pattern matchings. (!1168 by Christian Rinderknecht)
  • Add warning message when layout attribute is present on a constructor for a sum (issue #1104) (!1163 by @er433)

Fixed :

Changed :

Internal :

Details :

[added] New pass enforcing: consts cannot be assigned to, vars cannot be captured.

No details provided for this change. Please visit the MR to learn more

[added] Added syntactic support for tuples without parentheses at the top-level of patterns in pattern matchings.

No details provided for this change. Please visit the MR to learn more

[added] Add warning message when layout attribute is present on a constructor for a sum (issue #1104)

No details provided for this change. Please visit the MR to learn more

[fixed] Fixed typo's in tutorial and cheat sheet

No details provided for this change. Please visit the MR to learn more

[fixed] Improve messages for var/const pass.

No details provided for this change. Please visit the MR to learn more

[fixed] Move decompilation of assign to self pass. Prepare pipeline for language specific decompilation

No details provided for this change. Please visit the MR to learn more

[fixed] fix a bug in ligo test framework where Test.transfer was returning unit in case of success

No details provided for this change. Please visit the MR to learn more

[fixed] Restore earlier fix for lowercase switch cases

No details provided for this change. Please visit the MR to learn more

[fixed] Fix inversion in missmatch errors

No details provided for this change. Please visit the MR to learn more

[fixed] Bugfix 2n/2

No details provided for this change. Please visit the MR to learn more

[changed] Updating Taco-shop tutorial (all syntaxes, ligo test framework usage)

No details provided for this change. Please visit the MR to learn more

[changed] Improve JsLIGO lexer error messages

No details provided for this change. Please visit the MR to learn more

[changed] Adds a hint remembering users that warnings can be prevented using underscores

No details provided for this change. Please visit the MR to learn more

[changed] vendors/ligo-utils/simple-utils/x_list.ml: added code quality marker, some syntax nits

No details provided for this change. Please visit the MR to learn more

[internal] Rename Comments module to AttachComments

No details provided for this change. Please visit the MR to learn more


0.16.1

Run this release with Docker: docker run ligolang/ligo:0.16.1

Details :

0.16.0

Run this release with Docker: docker run ligolang/ligo:0.16.0

Added :

Fixed :

Changed :

  • src/test/test_helpers.ml: added code quality marker, added helper for get_program, use it in other test files (!1138 by @er433)

Internal :

Details :

[added] Add more documentation on LIGO testing framework

No details provided for this change. Please visit the MR to learn more

[added] Pass for repeated usage of ticket values

No details provided for this change. Please visit the MR to learn more

[added] added variable references support (get-scope)

No details provided for this change. Please visit the MR to learn more

[fixed] Fix issue with JsLIGO sequences

No details provided for this change. Please visit the MR to learn more

[fixed] Constructors without arguments are abstracted to constructor taking unit pattern

No details provided for this change. Please visit the MR to learn more

[fixed] fix dry-run rejecting Tezos.self

No details provided for this change. Please visit the MR to learn more

[changed] src/test/test_helpers.ml: added code quality marker, added helper for get_program, use it in other test files

No details provided for this change. Please visit the MR to learn more

[internal] Removed ppx_let dependency, replaced by OCaml built-in let-operators

No details provided for this change. Please visit the MR to learn more


0.15.0

Run this release with Docker: docker run ligolang/ligo:0.15.0

Added :

  • Compiler now emits Edo GET k and UPDATE k when [@layout:comb] is used with records (!1102 by tomjack)

Fixed :

Removed :

Performance :

  • Added compile-time optimization of comb record destructuring and uncurrying (!1102 by tomjack)

Internal :

Details :

[added] Compiler now emits Edo GET k and UPDATE k when [@layout:comb] is used with records

No details provided for this change. Please visit the MR to learn more

[fixed] Fix JsLIGO identifiers to include _

No details provided for this change. Please visit the MR to learn more

[fixed] Fix failure for TWild (_ for types)

No details provided for this change. Please visit the MR to learn more

[fixed] Fix order in which things are evaluated in evaluate-value

No details provided for this change. Please visit the MR to learn more

[fixed] Fix failure when applying a type var. not expecting arguments

No details provided for this change. Please visit the MR to learn more

[fixed] Fix support for lowcase verbatim strings in JsLIGO (important for test framework support)

No details provided for this change. Please visit the MR to learn more

[fixed] Add JsLIGO to Edo features documentation

No details provided for this change. Please visit the MR to learn more

[fixed] Fix JsLIGO sapling types

No details provided for this change. Please visit the MR to learn more

[removed] Remove unused warning message for rec. definitions

No details provided for this change. Please visit the MR to learn more

[performance] Added compile-time optimization of comb record destructuring and uncurrying

No details provided for this change. Please visit the MR to learn more

[internal] Script which shows a queue of files that need refactoring

No details provided for this change. Please visit the MR to learn more

[internal] Preparation work for merging type_value and type_expression

No details provided for this change. Please visit the MR to learn more

[internal] rename inferance → inference

No details provided for this change. Please visit the MR to learn more

[internal] Clean up comments in the tests from debugging the typer

No details provided for this change. Please visit the MR to learn more

[internal] More testing ability in the documentation

No details provided for this change. Please visit the MR to learn more


0.14.0

Run this release with Docker: docker run ligolang/ligo:0.14.0

Added :

Fixed :

Internal :

Details :

[added] Add type inference to the compiler

No details provided for this change. Please visit the MR to learn more

[added] LIGO Test Framework documentation

No details provided for this change. Please visit the MR to learn more

[added] Support for deep pattern, record pattern, wildcard ("_") pattern and unit pattern in matching expressions

No details provided for this change. Please visit the MR to learn more

[added] Allow identifiers with underscore and wildcard name

No details provided for this change. Please visit the MR to learn more

[added] Add description and documentation for each sub command

No details provided for this change. Please visit the MR to learn more

[added] Add support for JsLIGO

No details provided for this change. Please visit the MR to learn more

[added] Explain sequences in ReasonLIGO and CameLIGO

No details provided for this change. Please visit the MR to learn more

[added] Add werror flag to mark warnings as errors

No details provided for this change. Please visit the MR to learn more

[added] Add repl

No details provided for this change. Please visit the MR to learn more

[fixed] fix bug occuring when overriding option type

No details provided for this change. Please visit the MR to learn more

[internal] Add lexical units

No details provided for this change. Please visit the MR to learn more

[internal] Support for tuples without parentheses as last expressions in sequences.

No details provided for this change. Please visit the MR to learn more

[internal] Fix typing of For_each with any type

No details provided for this change. Please visit the MR to learn more

[internal] Uncurry before inlining

No details provided for this change. Please visit the MR to learn more


0.13.0

Run this release with Docker: docker run ligolang/ligo:0.13.0

Added :

Fixed :

  • Changed colour of background and foreground for hovered items in contact page, fixes #215 (!1059 by Suzanne Soy)
  • fixing nested record update bug by normalizing Edo combs decompilation (!1047 by tomjack)
Details :

[added] Add a REPL based on linenoise

No details provided for this change. Please visit the MR to learn more

[fixed] Changed colour of background and foreground for hovered items in contact page, fixes #215

No details provided for this change. Please visit the MR to learn more

[fixed] fixing nested record update bug by normalizing Edo combs decompilation

No details provided for this change. Please visit the MR to learn more


0.12.0

Run this release with Docker: docker run ligolang/ligo:0.12.0

Added :

Fixed :

  • Tezos.self_address is now allowed in lambdas (!1035 by tomjack)
  • Curried functions again work correctly with commands like interpret and compile-storage (!1038 by tomjack)

Removed :

Details :

[added] The Emacs ligo-mode is now released on MELPA

No details provided for this change. Please visit the MR to learn more

[added] Some optimizations for Edo, including DUP n

No details provided for this change. Please visit the MR to learn more

[added][@layout:comb] record destructuring is now compiled to UNPAIR n

No details provided for this change. Please visit the MR to learn more

[fixed] Tezos.self_address is now allowed in lambdas

No details provided for this change. Please visit the MR to learn more

[fixed] Curried functions again work correctly with commands like interpret and compile-storage

No details provided for this change. Please visit the MR to learn more

[removed] Dropped support for pre-Edo protocols

No details provided for this change. Please visit the MR to learn more

[removed] Dropped support for pre-Edo protocols (carthage, dalphanet)

No details provided for this change. Please visit the MR to learn more


0.11.0

Run this release with Docker: docker run ligolang/ligo:0.11.0

Added :

  • add set update primitive (!1021 by Rémi Lesénéchal)
  • prototype typer: separated typeclass deduce_and_clean to its own heuristic; trimmed down the Compat modules (!981 by Suzanne Soy)
  • prototype typer: heuristic to inline the definition of type variables used in type classes (!981 by Suzanne Soy)
  • Fixed potential bug: use multiset in typeclasses_constraining; added indexer for typeclasses using a variable as an unbound var; sketched out heuristic which inlines variabes in typeclasses (!981 by Suzanne Soy)
Details :

[added] add set update primitive

No details provided for this change. Please visit the MR to learn more

[added] prototype typer: separated typeclass deduce_and_clean to its own heuristic; trimmed down the Compat modules

No details provided for this change. Please visit the MR to learn more

[added] prototype typer: heuristic to inline the definition of type variables used in type classes

No details provided for this change. Please visit the MR to learn more

[added] Fixed potential bug: use multiset in typeclasses_constraining; added indexer for typeclasses using a variable as an unbound var; sketched out heuristic which inlines variabes in typeclasses

No details provided for this change. Please visit the MR to learn more


0.10.0

Run this release with Docker: docker run ligolang/ligo:0.10.0

Added :

Fixed :

Changed :

Internal :

Details :

[added] Uncurry functions only used in full applications

No details provided for this change. Please visit the MR to learn more

[added] Few fixes in tickets untranspilation

No details provided for this change. Please visit the MR to learn more

[added] Added doc for Edo things (tickets/sapling)

No details provided for this change. Please visit the MR to learn more

[fixed] Fix handling of true/false constructors in switch expressions.

No details provided for this change. Please visit the MR to learn more

[fixed] Added parsing of constant constructors as function arguments.

No details provided for this change. Please visit the MR to learn more

[changed] Prevent inappropriate optimisation of %Michelson lambdas

No details provided for this change. Please visit the MR to learn more

[changed] ligo michelson backend now uses the "protocol--008-PtEdoTez-"

No details provided for this change. Please visit the MR to learn more

[changed] Upgrade tezos backend (for dry-run, compile-expression..) to Edo

No details provided for this change. Please visit the MR to learn more

[internal] Refactor & generalize Michelson peephole framework

No details provided for this change. Please visit the MR to learn more

[internal] Use opam lock to lock dependencies

No details provided for this change. Please visit the MR to learn more

[internal] Progress on modular interface for heuristics and abstraction over type_variable, renamed modules, moved files

No details provided for this change. Please visit the MR to learn more

[internal] Refactoring of the front-end.

No details provided for this change. Please visit the MR to learn more

[internal] Fixed the CST printers.

No details provided for this change. Please visit the MR to learn more


0.9.0

Run this release with Docker: docker run ligolang/ligo:0.9.0

Added :

Fixed :

  • use letters instead of numbers for type variables in debug trace (!918 by Suzanne Soy)
  • Fixed small bug in grouped_by_variable (use a multiset instead of a set, so that double-add and removal don't remove both copies (!915 by Suzanne Soy)
  • Fix assert in type_and_subst (!915 by Suzanne Soy)

Internal :

  • Addded pretty-printers to the API of indexer plug-ins; added test for addition of constraints and merging of type variables for the by_constraint_identifier indexer and other indexers. (!914 by Suzanne Soy)
Details :

[added] Add chain_id literals

No details provided for this change. Please visit the MR to learn more

[fixed] use letters instead of numbers for type variables in debug trace

No details provided for this change. Please visit the MR to learn more

[fixed] Fixed small bug in grouped_by_variable (use a multiset instead of a set, so that double-add and removal don't remove both copies

No details provided for this change. Please visit the MR to learn more

[fixed] Fix assert in type_and_subst

No details provided for this change. Please visit the MR to learn more

[internal] Addded pretty-printers to the API of indexer plug-ins; added test for addition of constraints and merging of type variables for the by_constraint_identifier indexer and other indexers.

No details provided for this change. Please visit the MR to learn more


0.8.0

Run this release with Docker: docker run ligolang/ligo:0.8.0

Fixed :

Details :

[fixed] ReasonLIGO: Allow if without else in more places.

No details provided for this change. Please visit the MR to learn more


0.7.1

Run this release with Docker: docker run ligolang/ligo:0.7.1

Internal :

Details :

[internal] Improve transpilation and speed up transpilation tests

No details provided for this change. Please visit the MR to learn more


0.7.0

Run this release with Docker: docker run ligolang/ligo:0.7.0

Added :

Internal :

  • Remove vendored protocols -- fake origination & bake for proto env setup (!921 by tomjack)
Details :

[added] tuple destructuring are now transformed into nested pattern matches

No details provided for this change. Please visit the MR to learn more

[added] linear pattern matching (tuple/record)

No details provided for this change. Please visit the MR to learn more

[added] EDO primitives (use --protocol edo and --disable-michelson-typechecking)

No details provided for this change. Please visit the MR to learn more

[internal] Remove vendored protocols -- fake origination & bake for proto env setup

No details provided for this change. Please visit the MR to learn more


0.6.0

Run this release with Docker: docker run ligolang/ligo:0.6.0

Added :

  • prototype typer: added a separate constraint checking routine which will be executed after type inference (!910 by Suzanne Soy)

Fixed :

  • Fix bug with let_in annotations in recursive functions (!905 by tomjack)
  • the CLI print-* commands now print proper JSON when --format=json, also removed the sugar field from the core representation (!892 by Rémi Lesénéchal)

Changed :

  • Use virtual ES6FUN token for ReasonLIGO to allow for more accurate error messages. (!876 by Sander Spies)

Internal :

Details :

[added] prototype typer: added a separate constraint checking routine which will be executed after type inference

No details provided for this change. Please visit the MR to learn more

[fixed] Fix bug with let_in annotations in recursive functions

No details provided for this change. Please visit the MR to learn more

[fixed] the CLI print-* commands now print proper JSON when --format=json, also removed the sugar field from the core representation

No details provided for this change. Please visit the MR to learn more

[changed] Use virtual ES6FUN token for ReasonLIGO to allow for more accurate error messages.

No details provided for this change. Please visit the MR to learn more

[internal] prototype typer: split DB index tests into separate files, added test skeleton for cycle_detection_topological_sort

No details provided for this change. Please visit the MR to learn more

[internal] Add module_access expression and type_expression

No details provided for this change. Please visit the MR to learn more

[internal] Compile a multiple file contract

No details provided for this change. Please visit the MR to learn more


0.5.0

Run this release with Docker: docker run ligolang/ligo:0.5.0

Added :

  • Add two new function:
  • List.head_opt
  • List.tail_opt

which returns none if the list is empty and respectively hd and tl if the list is CONS (hd,tl) (!887 by Pierre-Emmanuel Wulfman)

Changed :

Internal :

Details :

[added] Add two new function:

  • List.head_opt
  • List.tail_opt

which returns none if the list is empty and respectively hd and tl if the list is CONS (hd,tl)

No details provided for this change. Please visit the MR to learn more

[changed] Add missing location to parser error messages in JSON

No details provided for this change. Please visit the MR to learn more

[changed] Change in compilation of record updates

No details provided for this change. Please visit the MR to learn more

[changed] Port stacking pass to Coq

No details provided for this change. Please visit the MR to learn more

[internal] Add a build system that type file in order to resolve dependency

No details provided for this change. Please visit the MR to learn more


0.4.0

Run this release with Docker: docker run ligolang/ligo:0.4.0

Added :

Fixed :

Internal :

  • Disable failing tests for typer not currently in use when it is in use (except the one being worked on) (!839 by Suzanne Soy)
  • Fixed build issue with dune b inside a nix-shell (thanks Sander for providing the fix) (!839 by Suzanne Soy)
  • scripts/add-changelog-entry.sh now runs a nested nix-shell if jq or json2yaml aren't installed in the outer nix shell (!839 by Suzanne Soy)
  • boolean constant to force use of the typer which is not currently in use in the tests (!839 by Suzanne Soy)
  • Solve warnings during compilation (!871 by Pierre-Emmanuel Wulfman)
Details :

[added] alias_selector for heuristics to take into account aliases

No details provided for this change. Please visit the MR to learn more

[added] internal documentation for the typer

No details provided for this change. Please visit the MR to learn more

[added] add --typer option to choose between 'old' and 'new' typer

No details provided for this change. Please visit the MR to learn more

[fixed] Unprotected Sys.getenv

No details provided for this change. Please visit the MR to learn more

[internal] Disable failing tests for typer not currently in use when it is in use (except the one being worked on)

No details provided for this change. Please visit the MR to learn more

[internal] Fixed build issue with dune b inside a nix-shell (thanks Sander for providing the fix)

No details provided for this change. Please visit the MR to learn more

[internal] scripts/add-changelog-entry.sh now runs a nested nix-shell if jq or json2yaml aren't installed in the outer nix shell

No details provided for this change. Please visit the MR to learn more

[internal] boolean constant to force use of the typer which is not currently in use in the tests

No details provided for this change. Please visit the MR to learn more

[internal] Solve warnings during compilation

No details provided for this change. Please visit the MR to learn more


0.3.0

Run this release with Docker: docker run ligolang/ligo:0.3.0

Added :

  • --protocol preloads types corresponding to a given protocol. use "ligo compile-contract path entrypoint --protocol=X --disable-michelson-typecheking" in combination with michelson_insertion (!837 by Rémi Lesénéchal)

Fixed :

  • Fix broken Nix build on MacOS (!852 by Alexander Bantyev)
  • Documentation of Pascaligo: change deprecated bytes_unpack to Bytes.unpack. (!820 by Sander Spies)
  • Fixed 2 bugs in changelog generator (a shell variable wasn't exported but was used in a subprocess; the evaluation time of some nix expressions seem to have changed so we're invoking a shell command instead of having the nix expression evaluated before its inputs are ready) (!853 by Suzanne Soy)
  • Fix broken build after removal of generated code (!807 by Suzanne Soy)

Changed :

  • Type constant are now loaded into the type environment, they become variables until the typed AST (!849 by Rémi Lesénéchal)
  • In the typer which is not currently in use, added a boolean flag on constraints indicating whether they might be necessary for correctness (!814 by Suzanne Soy)
  • In the typer which is not currently in use, constraint removal is now handled by normalizers (!801 by Suzanne Soy)
  • In the typer which is not currently in use, heuristics can now request the justified removal of some of the constraints (!801 by Suzanne Soy)

Performance :

  • Optimization: push DROP into failing conditionals (!820 by Tom)

Internal :

Details :

[added] --protocol preloads types corresponding to a given protocol. use "ligo compile-contract path entrypoint --protocol=X --disable-michelson-typecheking" in combination with michelson_insertion

No details provided for this change. Please visit the MR to learn more

[fixed] Fix broken Nix build on MacOS

No details provided for this change. Please visit the MR to learn more

[fixed] Documentation of Pascaligo: change deprecated bytes_unpack to Bytes.unpack.

No details provided for this change. Please visit the MR to learn more

[fixed] Fixed 2 bugs in changelog generator (a shell variable wasn't exported but was used in a subprocess; the evaluation time of some nix expressions seem to have changed so we're invoking a shell command instead of having the nix expression evaluated before its inputs are ready)

No details provided for this change. Please visit the MR to learn more

[fixed] Fix broken build after removal of generated code

No details provided for this change. Please visit the MR to learn more

[changed] Type constant are now loaded into the type environment, they become variables until the typed AST

No details provided for this change. Please visit the MR to learn more

[changed] In the typer which is not currently in use, added a boolean flag on constraints indicating whether they might be necessary for correctness

No details provided for this change. Please visit the MR to learn more

[changed] In the typer which is not currently in use, constraint removal is now handled by normalizers

No details provided for this change. Please visit the MR to learn more

[changed] In the typer which is not currently in use, heuristics can now request the justified removal of some of the constraints

No details provided for this change. Please visit the MR to learn more

[performance] Optimization: push DROP into failing conditionals

No details provided for this change. Please visit the MR to learn more

[internal] Create polymorphic function and use them in asts and passes to factorize code and simplify maintenance

No details provided for this change. Please visit the MR to learn more

[internal] Refactoring of front-end (making libraries, removing exceptions from interfaces, factoring and removing code etc.)

No details provided for this change. Please visit the MR to learn more

[internal] Move the preprocessor away from the parser

No details provided for this change. Please visit the MR to learn more


0.2.1

Run this release with Docker: docker run ligolang/ligo:0.2.1

Added :

Fixed :

Details :

[added] --lib option for the get-scope command. this allows to specify paths to included files

No details provided for this change. Please visit the MR to learn more

[fixed] fixed a but in new michelson layout annotation

No details provided for this change. Please visit the MR to learn more

[fixed] add the --init-file option to compile-expresssion command

No details provided for this change. Please visit the MR to learn more


0.2.0

Run this release with Docker: docker run ligolang/ligo:0.2.0

Added :

Fixed :

Changed :

Details :

[added] two new attributes on record and variant types: annot for michelson field annotation and layout (comb or tree) for compilation layout

No details provided for this change. Please visit the MR to learn more

[fixed] Fix error messages snippet printing

No details provided for this change. Please visit the MR to learn more

[fixed] Fix wrong error message due to wrong merge

No details provided for this change. Please visit the MR to learn more

[fixed] Redeploy website on release to update the changelog

No details provided for this change. Please visit the MR to learn more

No details provided for this change. Please visit the MR to learn more

[changed] Added dependency on json2yaml and jq in nix-shell

No details provided for this change. Please visit the MR to learn more


0.1.0

Run this release with Docker: docker run ligolang/ligo:0.1.0

Added :

Fixed :

Changed :

Details :

[added] Add a dialect option when decompiling to pascaligo

No details provided for this change. Please visit the MR to learn more

[added] Add a predifine function 'assert_some'

No details provided for this change. Please visit the MR to learn more

[added] Add error message for function argument tuple components mismatch

No details provided for this change. Please visit the MR to learn more

[added] Add missing function argument type annotation error

No details provided for this change. Please visit the MR to learn more

[fixed] Fixed error message when lexing an odd-lengthed byte sequence.

No details provided for this change. Please visit the MR to learn more

[fixed] Add locations to the constant typers for all the primitives

No details provided for this change. Please visit the MR to learn more

[fixed] dune runtest in nix-shell

No details provided for this change. Please visit the MR to learn more

[changed] Removed dependencies on the Tezos protocol from compiler stages and passes.

No details provided for this change. Please visit the MR to learn more

[changed] Improve non-parser error messages

No details provided for this change. Please visit the MR to learn more


0.0.1

Run this release with Docker: docker run ligolang/ligo:0.0.1

Added :

Details :

[added] Add changelog and versioning

No details provided for this change. Please visit the MR to learn more


0.0.0

Run this release with Docker: docker run ligolang/ligo:0.0.0

Details :