mirror of
https://github.com/luau-lang/luau.git
synced 2024-11-15 14:25:44 +08:00
e25b0a6275
* Fix a use-after-free bug in the new type cloning algorithm
* Tighten up the type of `coroutine.wrap`. It is now `<A..., R...>(f:
(A...) -> R...) -> ((A...) -> R...)`
* Break `.luaurc` out into a separate library target `Luau.Config`. This
makes it easier for applications to reason about config files without
also depending on the type inference engine.
* Move typechecking limits into `FrontendOptions`. This allows embedders
more finely-grained control over autocomplete's internal time limits.
* Fix stability issue with debugger onprotectederror callback allowing
break in non-yieldable contexts
New solver:
* Initial work toward [Local Type
Inference](0e1082108f/rfcs/local-type-inference.md
)
* Introduce a new subtyping test. This will be much nicer than the old
test because it is completely separate both from actual type inference
and from error reporting.
Native code generation:
* Added function to compute iterated dominance frontier
* Optimize barriers in SET_UPVALUE when tag is known
* Cache lua_State::global in a register on A64
* Optimize constant stores in A64 lowering
* Track table array size state to optimize array size checks
* Add split tag/value store into a VM register
* Check that spills can outlive the block only in specific conditions
---------
Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>
Co-authored-by: Vyacheslav Egorov <vegorov@roblox.com>
125 lines
3.2 KiB
C++
125 lines
3.2 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>
|
|
|
|
#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
|