# Multi-error reporting and raw\_hash in the LSP and VS Code extension

**URL:** <https://community.simplicity-lang.org/t/multi-error-reporting-and-raw-hash-in-the-lsp-and-vs-code-extension/97>\
**Category:** General\
**Created:** [October 20, 2026, 2:01pm UTC](https://community.simplicity-lang.org/t/multi-error-reporting-and-raw-hash-in-the-lsp-and-vs-code-extension/97 "2026-10-20T14:01:10Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![LesterEvSe](https://yyz1.discourse-cdn.com/flex007/user_avatar/community.simplicity-lang.org/lesterevse/32/67_2.png) [@LesterEvSe](https://community.simplicity-lang.org/u/LesterEvSe)\
**Post date:** [October 20, 2026, 2:01pm UTC](https://community.simplicity-lang.org/t/multi-error-reporting-and-raw-hash-in-the-lsp-and-vs-code-extension/97/1 "2026-10-20T14:01:10Z")

</div>

SimplicityHL upstream branch now keeps analysing after an error, and adds a new unstable `raw_hash` builtin. Both are available in development branches of `simplicityhl-lsp` and the VS Code extension. You get all errors in the editor at once, and `raw_hash` gets completion, hover docs and diagnostics.

### More than one error per run

Take this program and turn on the Enums experimental feature:

```rust
type Alias = Missing;
enum E { A(Unknown), B }
fn f(a: (Foo, Bar), b: u32) -> u32 { b }
fn g() -> u32 { y }

fn main() {
    let t: bool = true;
    let r: u32 = f(1, t);
}

```

With the current release (SimplicityHL 0.8.0 / `simplicityhl-lsp` 0.8.0), analysis stops at the first failing item, so you see only one error:

 ![image](https://canada1.discourse-cdn.com/flex007/uploads/simplicity_community/original/1X/99e6b11206859f18d30e6a947fb554dba200a98b.png)

On SimplicityHL upstream, analysis continues after an undefined type ([#430](https://github.com/BlockstreamResearch/SimplicityHL/pull/430)) or a failed function body ([#424](https://github.com/BlockstreamResearch/SimplicityHL/pull/424)). The editor now shows all of them:

 ![image](https://canada1.discourse-cdn.com/flex007/uploads/simplicity_community/original/1X/e3ebfb2ec2860017b75c1743b8751da22149d59c.png)

More details on the compiler side: [SimplicityHL now reports more than one error per run](https://community.simplicity-lang.org/t/simplicityhl-now-reports-more-than-one-error-per-run/94).

### `raw_hash`

`raw_hash::<T>(tuple)` hashes a tuple of unsigned integers with SHA-256 and returns a `u256`. It’s unstable, so it’s behind a setting like Imports and Enums: **Settings → SimplicityHL: Experimental Features → Raw Hash**.

```rust
fn main() {
    let a8: u8 = 255;
    let a32: u32 = 1_000_000;

    let raw: u256 = raw_hash::<(u8, u32)>((a8, a32));
    let ctx: Ctx8 = jet::sha_256_ctx_8_init();
    let ctx: Ctx8 = jet::sha_256_ctx_8_add_1(ctx, a8);
    let ctx: Ctx8 = jet::sha_256_ctx_8_add_4(ctx, a32);
    assert!(jet::eq_256(raw, jet::sha_256_ctx_8_finalize(ctx)));
}

```

With Raw Hash off, the editor reports that `raw_hash` needs the unstable feature:

 ![image](https://canada1.discourse-cdn.com/flex007/uploads/simplicity_community/original/1X/0313fa403c137f3fadc5beabc1342a4d86e752a1.jpeg)

With it on, the code checks cleanly, and hovering over `raw_hash` shows its signature and a usage example:

 ![image](https://canada1.discourse-cdn.com/flex007/uploads/simplicity_community/original/1X/5e2a0f789670389483657ca2b5593ce469463590.png)

The extension also adds `-Z raw_hash` to its Compile commands when the setting is on.

`raw_hash` supports tuples of `u8`, `u16`, `u32`, `u64`, `u128` and `u256`.

### Try it

None of this is released yet. The instructions use these commits:

- **SimplicityHL:** [`ec8eca7`](https://github.com/BlockstreamResearch/SimplicityHL/tree/ec8eca789b1b27f5bdd9478d60a6c56158817405)
- **simplicityhl-lsp:** [`032a4ca`](https://github.com/BlockstreamResearch/simplicityhl-lsp/tree/032a4ca15aeebc34a391dcf78aad1fe69a6b9144)
- **simplicityhl-vscode:** [`423892d`](https://github.com/BlockstreamResearch/simplicityhl-vscode/tree/423892dce8daff5295a07609baa42fee7cf1f768)
