fix: improve partial evaluation

#15781

Closing issue

Pull request

Merged
O
Ocean-OS
Apr 17, 2025, 9:16 AM

This further improves the partial evaluation implemented in #15494. It accounts for sources that are declared as $state, but never reassigned to (and can be treated as constants), and other (somewhat more complex) cases.

A few possible end goals for this:

  • Respect TypeScript type annotations/assertions
  • Primitive function type inference/evaluation?:
function get_pi() {
    return 3.14159265358979; //constant value
}
  • In call expressions, infer types if the callee is a known global:
String(stuff); //string type
Math.random(); //number

closes #14280

Before submitting the PR, please make sure you do the following

  • It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs
  • Prefix your PR title with feat:, fix:, chore:, or docs:.
  • This message body should clearly illustrate what problems it solves.
  • Ideally, include a test that fails without this PR but passes with it.
  • If this PR changes code within packages/svelte/src, add a changeset (npx changeset).

Tests and linting

  • Run the tests with pnpm test and lint the project with pnpm lint

Info

Merged at Apr 18, 2025, 3:19 PM
Merged by Rich-Harris
Assignees None
Reviewers None
Labels None
Milestone None