Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Roblox
GitHub Repository: Roblox/luau
Path: blob/master/CLI/src/AnalyzeRequirer.cpp
2725 views
1
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
2
#include "Luau/AnalyzeRequirer.h"
3
4
#include "Luau/FileUtils.h"
5
#include "Luau/RequireNavigator.h"
6
#include "Luau/VfsNavigator.h"
7
8
#include <string>
9
10
static Luau::Require::NavigationContext::NavigateResult convert(NavigationStatus status)
11
{
12
if (status == NavigationStatus::Success)
13
return Luau::Require::NavigationContext::NavigateResult::Success;
14
else if (status == NavigationStatus::Ambiguous)
15
return Luau::Require::NavigationContext::NavigateResult::Ambiguous;
16
else
17
return Luau::Require::NavigationContext::NavigateResult::NotFound;
18
}
19
20
static Luau::Require::NavigationContext::ConfigStatus convert(VfsNavigator::ConfigStatus status)
21
{
22
if (status == VfsNavigator::ConfigStatus::Ambiguous)
23
return Luau::Require::NavigationContext::ConfigStatus::Ambiguous;
24
else if (status == VfsNavigator::ConfigStatus::PresentJson)
25
return Luau::Require::NavigationContext::ConfigStatus::PresentJson;
26
else if (status == VfsNavigator::ConfigStatus::PresentLuau)
27
return Luau::Require::NavigationContext::ConfigStatus::PresentLuau;
28
else
29
return Luau::Require::NavigationContext::ConfigStatus::Absent;
30
}
31
32
FileNavigationContext::FileNavigationContext(std::string requirerPath)
33
: requirerPath(std::move(requirerPath))
34
{
35
}
36
37
Luau::Require::NavigationContext::NavigateResult FileNavigationContext::resetToRequirer()
38
{
39
if (requirerPath == "-")
40
return convert(vfs.resetToStdIn());
41
42
return convert(vfs.resetToPath(requirerPath));
43
}
44
45
Luau::Require::NavigationContext::NavigateResult FileNavigationContext::jumpToAlias(const std::string& path)
46
{
47
if (!isAbsolutePath(path))
48
return Luau::Require::NavigationContext::NavigateResult::NotFound;
49
50
return convert(vfs.resetToPath(path));
51
}
52
53
Luau::Require::NavigationContext::NavigateResult FileNavigationContext::toParent()
54
{
55
return convert(vfs.toParent());
56
}
57
58
Luau::Require::NavigationContext::NavigateResult FileNavigationContext::toChild(const std::string& component)
59
{
60
return convert(vfs.toChild(component));
61
}
62
63
bool FileNavigationContext::isModulePresent() const
64
{
65
return isFile(vfs.getAbsoluteFilePath());
66
}
67
68
std::optional<std::string> FileNavigationContext::getIdentifier() const
69
{
70
return vfs.getAbsoluteFilePath();
71
}
72
73
Luau::Require::NavigationContext::ConfigStatus FileNavigationContext::getConfigStatus() const
74
{
75
return convert(vfs.getConfigStatus());
76
}
77
78
Luau::Require::NavigationContext::ConfigBehavior FileNavigationContext::getConfigBehavior() const
79
{
80
return Luau::Require::NavigationContext::ConfigBehavior::GetConfig;
81
}
82
83
std::optional<std::string> FileNavigationContext::getAlias(const std::string& alias) const
84
{
85
return std::nullopt;
86
}
87
88
std::optional<std::string> FileNavigationContext::getConfig() const
89
{
90
return vfs.getConfig();
91
}
92
93