mirror of
https://github.com/luau-lang/luau.git
synced 2025-08-26 11:27:08 +01:00
# General * Expose an optional `get_alias` API as an alternative to `get_config` in Luau.Require and Luau.RequireNavigator. * Improve the Luau CLI's virtual filesystem implementation to fix bugs related to `init.luau`. Fixes https://github.com/luau-lang/luau/issues/1816 # New Type Solver * Avoid double reporting errors when erroneous arguments are provided to type functions. * Fix some instances of unresovable cyclic type functions in loops by only considering the first loop cycles. This results in some type inference inaccuracies when the type of a variable in loop through multiple iterations. Fixes https://github.com/luau-lang/luau/issues/1413. * Better generalize free types that have meaningful lower and upper bounds, especially for table indexers. * Report more specific errors when assigning or returning table literal types, instead of citing the *entire* table type. * Inference for functions with generic type packs is greatly improved. * Fix some internal compiler exceptions when using type-stating functions like `table.freeze` in `if _ then _ else _` expressions and short circuiting binary operations. * More consistently simplify unions of primitive types, especially in array-like and dictionary-like tables. * Fix a crash when type checking an erroneous type alias containing `typeof` with a type assertion expression, as in: ``` type MyTable = {} -- This will error at type checking time as it's a duplicate type MyTable = typeof(setmetatable(SomeTable :: {}, SomeMetaTable)); ``` * Fix a crash when inferring the type of an index expression where the indexee is invalid (e.g. `nil`). # Runtime * Avoid throwing an exception from `luau_load` if we run out of memory. * Type functions are no longer compiled and included in bytecode. Fixes #1817. * Fix some instances of Luau C API functions reading invalid debug information (generally when the first or last instruction of a block was being inspected). Fixes #1369. * Avoid potential signed integer overflow when doing bounds checks on tables. * Support 16 byte aligned userdata objects when system allocation alignment is also 16 bytes. * Fix memory leaks in `Luau.Require` when using VM build with no exceptions. Fixes #1827. --------- Co-authored-by: Andy Friesen <afriesen@roblox.com> Co-authored-by: Ariel Weiss <aaronweiss@roblox.com> Co-authored-by: Hunter Goldstein <hgoldstein@roblox.com> Co-authored-by: James McNellis <jmcnellis@roblox.com> Co-authored-by: Sora Kanosue <skanosue@roblox.com> Co-authored-by: Talha Pathan <tpathan@roblox.com> Co-authored-by: Varun Saini <vsaini@roblox.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>
|
|
|
|
namespace Luau
|
|
{
|
|
|
|
struct HotComment;
|
|
|
|
struct LintWarning
|
|
{
|
|
// Make sure any new lint codes are documented here: https://luau.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_RedundantNativeAttribute = 29,
|
|
|
|
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
|
|
inline constexpr 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",
|
|
"RedundantNativeAttribute",
|
|
};
|
|
// clang-format on
|
|
|
|
static_assert(std::size(kWarningNames) == unsigned(LintWarning::Code__Count), "did you forget to add warning to the list?");
|
|
|
|
} // namespace Luau
|