mirror of
https://github.com/luau-lang/luau.git
synced 2024-11-15 14:25:44 +08:00
9c2146288d
# What's changed? * Support for new 'require by string' RFC with relative paths and aliases in now enabled in Luau REPL application ### New Type Solver * Fixed assertion failure on generic table keys (`[expr] = value`) * Fixed an issue with type substitution traversing into the substituted parts during type instantiation * Fixed crash in union simplification when that union contained uninhabited unions and other types inside * Union types in binary type families like `add<a | b, c>` are expanded into `add<a, c> | add<b, c>` to handle * Added handling for type family solving creating new type families * Fixed a bug with normalization operation caching types with unsolved parts * Tables with uninhabited properties are now simplified to `never` * Fixed failures found by fuzzer ### Native Code Generation * Added support for shared code generation between multiple Luau VM instances * Fixed issue in load-store propagation and new tagged LOAD_TVALUE instructions * Fixed issues with partial register dead store elimination causing failures in GC assists --- ### Internal Contributors Co-authored-by: Aaron Weiss <aaronweiss@roblox.com> Co-authored-by: Alexander McCord <amccord@roblox.com> Co-authored-by: Andy Friesen <afriesen@roblox.com> Co-authored-by: James McNellis <jmcnellis@roblox.com> Co-authored-by: Vighnesh Vijay <vvijay@roblox.com> Co-authored-by: Vyacheslav Egorov <vegorov@roblox.com>
124 lines
3.1 KiB
C++
124 lines
3.1 KiB
C++
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
|
|
#pragma once
|
|
|
|
#include "Luau/Location.h"
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <stdint.h>
|
|
|
|
namespace Luau
|
|
{
|
|
|
|
struct HotComment;
|
|
|
|
struct LintWarning
|
|
{
|
|
// Make sure any new lint codes are documented here: https://luau-lang.org/lint
|
|
// Note that in Studio, the active set of lint warnings is determined by FStringStudioLuauLints
|
|
enum Code
|
|
{
|
|
Code_Unknown = 0,
|
|
|
|
Code_UnknownGlobal = 1, // superseded by type checker
|
|
Code_DeprecatedGlobal = 2,
|
|
Code_GlobalUsedAsLocal = 3,
|
|
Code_LocalShadow = 4, // disabled in Studio
|
|
Code_SameLineStatement = 5, // disabled in Studio
|
|
Code_MultiLineStatement = 6,
|
|
Code_LocalUnused = 7, // disabled in Studio
|
|
Code_FunctionUnused = 8, // disabled in Studio
|
|
Code_ImportUnused = 9, // disabled in Studio
|
|
Code_BuiltinGlobalWrite = 10,
|
|
Code_PlaceholderRead = 11,
|
|
Code_UnreachableCode = 12,
|
|
Code_UnknownType = 13,
|
|
Code_ForRange = 14,
|
|
Code_UnbalancedAssignment = 15,
|
|
Code_ImplicitReturn = 16, // disabled in Studio, superseded by type checker in strict mode
|
|
Code_DuplicateLocal = 17,
|
|
Code_FormatString = 18,
|
|
Code_TableLiteral = 19,
|
|
Code_UninitializedLocal = 20,
|
|
Code_DuplicateFunction = 21,
|
|
Code_DeprecatedApi = 22,
|
|
Code_TableOperations = 23,
|
|
Code_DuplicateCondition = 24,
|
|
Code_MisleadingAndOr = 25,
|
|
Code_CommentDirective = 26,
|
|
Code_IntegerParsing = 27,
|
|
Code_ComparisonPrecedence = 28,
|
|
|
|
Code__Count
|
|
};
|
|
|
|
Code code;
|
|
Location location;
|
|
std::string text;
|
|
|
|
static const char* getName(Code code);
|
|
static Code parseName(const char* name);
|
|
static uint64_t parseMask(const std::vector<HotComment>& hotcomments);
|
|
};
|
|
|
|
struct LintOptions
|
|
{
|
|
uint64_t warningMask = 0;
|
|
|
|
void enableWarning(LintWarning::Code code)
|
|
{
|
|
warningMask |= 1ull << code;
|
|
}
|
|
void disableWarning(LintWarning::Code code)
|
|
{
|
|
warningMask &= ~(1ull << code);
|
|
}
|
|
|
|
bool isEnabled(LintWarning::Code code) const
|
|
{
|
|
return 0 != (warningMask & (1ull << code));
|
|
}
|
|
|
|
void setDefaults();
|
|
};
|
|
|
|
// clang-format off
|
|
static const char* kWarningNames[] = {
|
|
"Unknown",
|
|
|
|
"UnknownGlobal",
|
|
"DeprecatedGlobal",
|
|
"GlobalUsedAsLocal",
|
|
"LocalShadow",
|
|
"SameLineStatement",
|
|
"MultiLineStatement",
|
|
"LocalUnused",
|
|
"FunctionUnused",
|
|
"ImportUnused",
|
|
"BuiltinGlobalWrite",
|
|
"PlaceholderRead",
|
|
"UnreachableCode",
|
|
"UnknownType",
|
|
"ForRange",
|
|
"UnbalancedAssignment",
|
|
"ImplicitReturn",
|
|
"DuplicateLocal",
|
|
"FormatString",
|
|
"TableLiteral",
|
|
"UninitializedLocal",
|
|
"DuplicateFunction",
|
|
"DeprecatedApi",
|
|
"TableOperations",
|
|
"DuplicateCondition",
|
|
"MisleadingAndOr",
|
|
"CommentDirective",
|
|
"IntegerParsing",
|
|
"ComparisonPrecedence",
|
|
};
|
|
// clang-format on
|
|
|
|
static_assert(std::size(kWarningNames) == unsigned(LintWarning::Code__Count), "did you forget to add warning to the list?");
|
|
|
|
} // namespace Luau
|