tree-sitter-tact icon indicating copy to clipboard operation
tree-sitter-tact copied to clipboard

Tracking issue: Tact v1.5.0

Open anton-trunov opened this issue 1 year ago • 2 comments

Full changelog for Tact v1.5.0: https://github.com/tact-lang/tact/blob/main/CHANGELOG.md#150---2024-09-15

New Tact features:

  • asm functions: asm fun keccak256(s: Slice): Int { 1 INT HASHEXT_KECCAK256 };
  • Wider range of serialization options for integers — uint1 through uint256 and int1 through int257: counter: Int as uint48;
  • Allow omitting last semicolons in contract/trait declarations and definitions: trait Test { abstract fun foo() } -- the semicolon after foo() is not required anymore.

New builtin and stdlib functions and methods:

  • The exists method for the Map type: m.exists(key), equivalent to m.get(key) != null;
  • The deepEquals method for the Map type: m1.deepEquals(m2);
  • The toSlice method for structs and messages: struct.toSlice();
  • The storeBit method for Builder type and the loadBit method for Slice type (aliases for storeBool and loadBool respectively): b.storeBit(true), sl.loadBit();
  • slice, rawSlice, ascii and crc32 built-in functions;
  • Corresponding stdlib functions for the new TVM instructions from 2023.07 and 2024.04 upgrades: storeBuilder extension function and gasConsumed, getComputeFee, getStorageFee, getForwardFee, getSimpleComputeFee, getSimpleForwardFee, getOriginalFwdFee, myStorageDue functions.
  • Builder.storeMaybeRef, parseStdAddress and parseVarAddress stdlib functions.

Tracking progress

  • [x] https://github.com/tact-lang/tree-sitter-tact/pull/40
  • [x] New release: https://github.com/tact-lang/tree-sitter-tact/releases/tag/v1.5.0
  • [x] Bugfix PR: #41
  • [x] Bugfix release: https://github.com/tact-lang/tree-sitter-tact/releases/tag/v1.5.1
  • [x] PR to Neovim's repos
    • [x] https://github.com/nvim-treesitter/nvim-treesitter/pull/7196
    • [ ] https://github.com/nvim-treesitter/nvim-treesitter-textobjects/pull/697
    • [x] https://github.com/nvim-treesitter/nvim-treesitter-context/pull/494

P.S.: Consider removing the built-in functions from highlighting queries, as this generally hurts the highlighting more than it helps. New structs, messages and constants are better candidates for inclusion into queries.

anton-trunov avatar Sep 15 '24 10:09 anton-trunov

Because of lack of lookaheads, implementing correct-ish asm function block parsing without resorting to external scanner (scanner.c) is quite tough. I'll try some more without it, but probably would have to make it anyways.

On the up side, making an external scanner here will help making https://github.com/tact-lang/tact/issues/837 later on

novusnota avatar Sep 24 '24 17:09 novusnota

Let's just support some reasonable subset of Fift-asm for now, without creating an external scanner. For instance, the stuff in stdlib.fc and other common and important FunC contracts. Our wiki has a list of those: https://github.com/tact-lang/tact/wiki/FunC-contracts.

And document somewhere that our tree-sitter does not support the full syntax.

anton-trunov avatar Sep 24 '24 17:09 anton-trunov

This was resolved long ago and only kept open because of the hanging PR to nvim-treesitter-textobjects. It's still there, but all other things were done, so let's close this issue as done too

novusnota avatar Nov 11 '24 13:11 novusnota