mirror of
https://github.com/luau-lang/luau.git
synced 2025-05-04 10:33:46 +01:00
Remove support for declaration syntax
This commit is contained in:
parent
bf45aca52e
commit
39ed00bf3a
1 changed files with 44 additions and 29 deletions
|
@ -77,6 +77,31 @@ static void generateDocumentationSymbols(TypeId ty, const std::string& rootName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void loadModuleIntoScope(TypeChecker& typeChecker, ModulePtr module, ScopePtr scope, const std::string& packageName)
|
||||||
|
{
|
||||||
|
CloneState cloneState;
|
||||||
|
|
||||||
|
for (const auto& [name, ty] : module->declaredGlobals)
|
||||||
|
{
|
||||||
|
TypeId globalTy = clone(ty, typeChecker.globalTypes, cloneState);
|
||||||
|
std::string documentationSymbol = packageName + "/global/" + name;
|
||||||
|
generateDocumentationSymbols(globalTy, documentationSymbol);
|
||||||
|
scope->bindings[typeChecker.globalNames.names->getOrAdd(name.c_str())] = {globalTy, Location(), false, {}, documentationSymbol};
|
||||||
|
|
||||||
|
persist(globalTy);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const auto& [name, ty] : module->getModuleScope()->exportedTypeBindings)
|
||||||
|
{
|
||||||
|
TypeFun globalTy = clone(ty, typeChecker.globalTypes, cloneState);
|
||||||
|
std::string documentationSymbol = packageName + "/globaltype/" + name;
|
||||||
|
generateDocumentationSymbols(globalTy.type, documentationSymbol);
|
||||||
|
scope->exportedTypeBindings[name] = globalTy;
|
||||||
|
|
||||||
|
persist(globalTy.type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
LoadDefinitionFileResult loadDefinitionFile(TypeChecker& typeChecker, ScopePtr targetScope, std::string_view source, const std::string& packageName)
|
LoadDefinitionFileResult loadDefinitionFile(TypeChecker& typeChecker, ScopePtr targetScope, std::string_view source, const std::string& packageName)
|
||||||
{
|
{
|
||||||
LUAU_TIMETRACE_SCOPE("loadDefinitionFile", "Frontend");
|
LUAU_TIMETRACE_SCOPE("loadDefinitionFile", "Frontend");
|
||||||
|
@ -101,27 +126,7 @@ LoadDefinitionFileResult loadDefinitionFile(TypeChecker& typeChecker, ScopePtr t
|
||||||
if (checkedModule->errors.size() > 0)
|
if (checkedModule->errors.size() > 0)
|
||||||
return LoadDefinitionFileResult{false, parseResult, checkedModule};
|
return LoadDefinitionFileResult{false, parseResult, checkedModule};
|
||||||
|
|
||||||
CloneState cloneState;
|
loadModuleIntoScope(typeChecker, checkedModule, targetScope, packageName);
|
||||||
|
|
||||||
for (const auto& [name, ty] : checkedModule->declaredGlobals)
|
|
||||||
{
|
|
||||||
TypeId globalTy = clone(ty, typeChecker.globalTypes, cloneState);
|
|
||||||
std::string documentationSymbol = packageName + "/global/" + name;
|
|
||||||
generateDocumentationSymbols(globalTy, documentationSymbol);
|
|
||||||
targetScope->bindings[typeChecker.globalNames.names->getOrAdd(name.c_str())] = {globalTy, Location(), false, {}, documentationSymbol};
|
|
||||||
|
|
||||||
persist(globalTy);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const auto& [name, ty] : checkedModule->getModuleScope()->exportedTypeBindings)
|
|
||||||
{
|
|
||||||
TypeFun globalTy = clone(ty, typeChecker.globalTypes, cloneState);
|
|
||||||
std::string documentationSymbol = packageName + "/globaltype/" + name;
|
|
||||||
generateDocumentationSymbols(globalTy.type, documentationSymbol);
|
|
||||||
targetScope->exportedTypeBindings[name] = globalTy;
|
|
||||||
|
|
||||||
persist(globalTy.type);
|
|
||||||
}
|
|
||||||
|
|
||||||
return LoadDefinitionFileResult{true, parseResult, checkedModule};
|
return LoadDefinitionFileResult{true, parseResult, checkedModule};
|
||||||
}
|
}
|
||||||
|
@ -228,9 +233,11 @@ ErrorVec accumulateErrors(
|
||||||
|
|
||||||
Module& module = *it2->second;
|
Module& module = *it2->second;
|
||||||
|
|
||||||
std::sort(module.errors.begin(), module.errors.end(), [](const TypeError& e1, const TypeError& e2) -> bool {
|
std::sort(module.errors.begin(), module.errors.end(),
|
||||||
return e1.location.begin > e2.location.begin;
|
[](const TypeError& e1, const TypeError& e2) -> bool
|
||||||
});
|
{
|
||||||
|
return e1.location.begin > e2.location.begin;
|
||||||
|
});
|
||||||
|
|
||||||
result.insert(result.end(), module.errors.begin(), module.errors.end());
|
result.insert(result.end(), module.errors.begin(), module.errors.end());
|
||||||
}
|
}
|
||||||
|
@ -642,7 +649,7 @@ ScopePtr Frontend::getModuleEnvironment(const SourceModule& module, const Config
|
||||||
result->bindings[name].typeId = typeChecker.anyType;
|
result->bindings[name].typeId = typeChecker.anyType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!config.globalTypePaths.empty())
|
if (!config.globalTypePaths.empty())
|
||||||
{
|
{
|
||||||
unfreeze(typeChecker.globalTypes);
|
unfreeze(typeChecker.globalTypes);
|
||||||
|
@ -650,11 +657,19 @@ ScopePtr Frontend::getModuleEnvironment(const SourceModule& module, const Config
|
||||||
result = std::make_shared<Scope>(result);
|
result = std::make_shared<Scope>(result);
|
||||||
for (const std::string& path : config.globalTypePaths)
|
for (const std::string& path : config.globalTypePaths)
|
||||||
{
|
{
|
||||||
auto source = fileResolver->readSource(path);
|
ModulePtr module = moduleResolver.getModule(path);
|
||||||
if (!source)
|
if (!module)
|
||||||
continue;
|
{
|
||||||
|
auto sourceCode = fileResolver->readSource(path);
|
||||||
|
if (!sourceCode)
|
||||||
|
continue;
|
||||||
|
SourceModule sourceModule = parse(path, sourceCode->source, {});
|
||||||
|
module = typeChecker.check(sourceModule, Mode::Strict);
|
||||||
|
if (!module)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
loadDefinitionFile(typeChecker, typeChecker.globalScope, source->source, path);
|
loadModuleIntoScope(typeChecker, module, result, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
freeze(typeChecker.globalTypes);
|
freeze(typeChecker.globalTypes);
|
||||||
|
|
Loading…
Add table
Reference in a new issue