mirror of
https://github.com/luau-lang/luau.git
synced 2024-11-15 06:15:44 +08:00
a36a3c41cc
### What's New? * Fragment Autocomplete: a new API allows for type checking a small fragment of code against an existing file, significantly speeding up autocomplete performance in large files. ### New Solver * E-Graphs have landed: this is an ongoing approach to make the new type solver simplify types in a more consistent and principled manner, based on similar work (see: https://egraphs-good.github.io/). * Adds support for exporting / local user type functions (previously they were always exported). * Fixes a set of bugs in which the new solver will fail to complete inference for simple expressions with just literals and operators. ### General Updates * Requiring a path with a ".lua" or ".luau" extension will now have a bespoke error suggesting to remove said extension. * Fixes a bug in which whether two `Luau::Symbol`s are equal depends on whether the new solver is enabled. --- Internal Contributors: Co-authored-by: Aaron Weiss <aaronweiss@roblox.com> Co-authored-by: Andy Friesen <afriesen@roblox.com> Co-authored-by: David Cope <dcope@roblox.com> Co-authored-by: Hunter Goldstein <hgoldstein@roblox.com> Co-authored-by: Varun Saini <vsaini@roblox.com> Co-authored-by: Vighnesh Vijay <vvijay@roblox.com> Co-authored-by: Vyacheslav Egorov <vegorov@roblox.com>
66 lines
1.7 KiB
C++
66 lines
1.7 KiB
C++
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
|
|
#include "ConstraintGeneratorFixture.h"
|
|
#include "ScopedFlags.h"
|
|
|
|
LUAU_FASTFLAG(LuauSolverV2);
|
|
|
|
namespace Luau
|
|
{
|
|
|
|
ConstraintGeneratorFixture::ConstraintGeneratorFixture()
|
|
: Fixture()
|
|
, mainModule(new Module)
|
|
, simplifier(newSimplifier(NotNull{&arena}, builtinTypes))
|
|
, forceTheFlag{FFlag::LuauSolverV2, true}
|
|
{
|
|
mainModule->name = "MainModule";
|
|
mainModule->humanReadableName = "MainModule";
|
|
|
|
BlockedTypePack::nextIndex = 0;
|
|
}
|
|
|
|
void ConstraintGeneratorFixture::generateConstraints(const std::string& code)
|
|
{
|
|
AstStatBlock* root = parse(code);
|
|
dfg = std::make_unique<DataFlowGraph>(DataFlowGraphBuilder::build(root, NotNull{&ice}));
|
|
cg = std::make_unique<ConstraintGenerator>(
|
|
mainModule,
|
|
NotNull{&normalizer},
|
|
NotNull{simplifier.get()},
|
|
NotNull{&typeFunctionRuntime},
|
|
NotNull(&moduleResolver),
|
|
builtinTypes,
|
|
NotNull(&ice),
|
|
frontend.globals.globalScope,
|
|
/*prepareModuleScope*/ nullptr,
|
|
&logger,
|
|
NotNull{dfg.get()},
|
|
std::vector<RequireCycle>()
|
|
);
|
|
cg->visitModuleRoot(root);
|
|
rootScope = cg->rootScope;
|
|
constraints = Luau::borrowConstraints(cg->constraints);
|
|
}
|
|
|
|
void ConstraintGeneratorFixture::solve(const std::string& code)
|
|
{
|
|
generateConstraints(code);
|
|
ConstraintSolver cs{
|
|
NotNull{&normalizer},
|
|
NotNull{simplifier.get()},
|
|
NotNull{&typeFunctionRuntime},
|
|
NotNull{rootScope},
|
|
constraints,
|
|
"MainModule",
|
|
NotNull(&moduleResolver),
|
|
{},
|
|
&logger,
|
|
NotNull{dfg.get()},
|
|
{}
|
|
};
|
|
|
|
cs.run();
|
|
}
|
|
|
|
} // namespace Luau
|