2021-10-29 16:25:12 -04:00
|
|
|
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
#include <optional>
|
|
|
|
|
|
|
|
namespace Luau
|
|
|
|
{
|
|
|
|
|
|
|
|
class AstExpr;
|
|
|
|
|
|
|
|
using ModuleName = std::string;
|
|
|
|
|
|
|
|
struct SourceCode
|
|
|
|
{
|
|
|
|
enum Type
|
|
|
|
{
|
|
|
|
None,
|
|
|
|
Module,
|
|
|
|
Script,
|
|
|
|
Local
|
|
|
|
};
|
|
|
|
|
|
|
|
std::string source;
|
|
|
|
Type type;
|
|
|
|
};
|
|
|
|
|
2021-11-04 22:07:18 -04:00
|
|
|
struct ModuleInfo
|
|
|
|
{
|
|
|
|
ModuleName name;
|
|
|
|
bool optional = false;
|
|
|
|
};
|
|
|
|
|
2021-10-29 16:25:12 -04:00
|
|
|
struct FileResolver
|
|
|
|
{
|
|
|
|
virtual ~FileResolver() {}
|
|
|
|
|
|
|
|
virtual std::optional<SourceCode> readSource(const ModuleName& name) = 0;
|
|
|
|
|
2021-11-04 22:07:18 -04:00
|
|
|
virtual std::optional<ModuleInfo> resolveModule(const ModuleInfo* context, AstExpr* expr)
|
|
|
|
{
|
|
|
|
return std::nullopt;
|
|
|
|
}
|
2021-10-29 16:25:12 -04:00
|
|
|
|
2021-11-04 22:07:18 -04:00
|
|
|
virtual std::string getHumanReadableModuleName(const ModuleName& name) const
|
2021-10-29 16:25:12 -04:00
|
|
|
{
|
|
|
|
return name;
|
|
|
|
}
|
|
|
|
|
2021-11-04 22:07:18 -04:00
|
|
|
virtual std::optional<std::string> getEnvironmentForModule(const ModuleName& name) const
|
|
|
|
{
|
|
|
|
return std::nullopt;
|
|
|
|
}
|
2021-10-29 16:25:12 -04:00
|
|
|
|
2021-11-04 22:07:18 -04:00
|
|
|
// DEPRECATED APIS
|
|
|
|
// These are going to be removed with LuauNewRequireTracer
|
|
|
|
virtual bool moduleExists(const ModuleName& name) const = 0;
|
|
|
|
virtual std::optional<ModuleName> fromAstFragment(AstExpr* expr) const = 0;
|
|
|
|
virtual ModuleName concat(const ModuleName& lhs, std::string_view rhs) const = 0;
|
|
|
|
virtual std::optional<ModuleName> getParentModuleName(const ModuleName& name) const = 0;
|
2021-10-29 16:25:12 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
struct NullFileResolver : FileResolver
|
|
|
|
{
|
|
|
|
std::optional<SourceCode> readSource(const ModuleName& name) override
|
|
|
|
{
|
|
|
|
return std::nullopt;
|
|
|
|
}
|
|
|
|
bool moduleExists(const ModuleName& name) const override
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
std::optional<ModuleName> fromAstFragment(AstExpr* expr) const override
|
|
|
|
{
|
|
|
|
return std::nullopt;
|
|
|
|
}
|
|
|
|
ModuleName concat(const ModuleName& lhs, std::string_view rhs) const override
|
|
|
|
{
|
|
|
|
return lhs;
|
|
|
|
}
|
|
|
|
std::optional<ModuleName> getParentModuleName(const ModuleName& name) const override
|
|
|
|
{
|
|
|
|
return std::nullopt;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace Luau
|