Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Roblox
GitHub Repository: Roblox/luau
Path: blob/master/Require/src/Navigation.h
2725 views
1
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
2
#pragma once
3
4
#include "Luau/RequireNavigator.h"
5
#include "Luau/Require.h"
6
7
#include <chrono>
8
#include <string>
9
10
struct lua_State;
11
struct luarequire_Configuration;
12
13
namespace Luau::Require
14
{
15
16
class RuntimeLuauConfigTimer
17
{
18
public:
19
void start(int timeoutMs);
20
bool isFinished() const;
21
22
private:
23
std::chrono::steady_clock::time_point startTime;
24
std::optional<std::chrono::steady_clock::duration> timeoutDuration;
25
};
26
27
class RuntimeNavigationContext : public NavigationContext
28
{
29
public:
30
RuntimeNavigationContext(luarequire_Configuration* config, lua_State* L, void* ctx, std::string requirerChunkname);
31
32
// Navigation interface
33
NavigateResult resetToRequirer() override;
34
NavigateResult jumpToAlias(const std::string& path) override;
35
36
NavigateResult toAliasOverride(const std::string& aliasUnprefixed) override;
37
NavigateResult toAliasFallback(const std::string& aliasUnprefixed) override;
38
39
NavigateResult toParent() override;
40
NavigateResult toChild(const std::string& component) override;
41
42
NavigationContext::ConfigStatus getConfigStatus() const override;
43
NavigationContext::ConfigBehavior getConfigBehavior() const override;
44
std::optional<std::string> getAlias(const std::string& alias) const override;
45
std::optional<std::string> getConfig() const override;
46
47
// Custom capabilities
48
bool isModulePresent() const;
49
std::optional<std::string> getChunkname() const;
50
std::optional<std::string> getLoadname() const;
51
std::optional<std::string> getCacheKey() const;
52
53
private:
54
std::optional<std::string> getStringFromCWriter(
55
luarequire_WriteResult (*writer)(lua_State* L, void* ctx, char* buffer, size_t buffer_size, size_t* size_out),
56
size_t initalBufferSize
57
) const;
58
std::optional<std::string> getStringFromCWriterWithInput(
59
luarequire_WriteResult (*writer)(lua_State* L, void* ctx, const char* input, char* buffer, size_t buffer_size, size_t* size_out),
60
std::string input,
61
size_t initalBufferSize
62
) const;
63
64
luarequire_Configuration* config;
65
lua_State* L;
66
void* ctx;
67
std::string requirerChunkname;
68
RuntimeLuauConfigTimer timer = RuntimeLuauConfigTimer{};
69
};
70
71
// Non-throwing error reporter
72
class RuntimeErrorHandler : public ErrorHandler
73
{
74
public:
75
RuntimeErrorHandler(std::string requiredPath);
76
void reportError(std::string message) override;
77
78
const std::string& getReportedError() const;
79
80
private:
81
std::string errorPrefix;
82
std::string errorMessage;
83
};
84
85
} // namespace Luau::Require
86
87