Skip to content

Commit 088f08f

Browse files
authored
Enable code analysis with latest-Recommended (#1681)
1 parent 4bff351 commit 088f08f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+248
-229
lines changed

.editorconfig

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,21 @@ indent_size = 2
3636
# IDE0055: Fix formatting
3737
dotnet_diagnostic.IDE0055.severity = warning
3838

39+
# Error CA1051 : Do not declare visible instance fields
40+
dotnet_diagnostic.CA1051.severity = none
41+
42+
# Error CA1720 : Identifiers should not contain type names
43+
dotnet_diagnostic.CA1720.severity = none
44+
45+
# Error CA1711: Identifiers should not have incorrect suffix
46+
dotnet_diagnostic.CA1711.severity = none
47+
48+
# Error CA1710: Identifiers should have correct suffix
49+
dotnet_diagnostic.CA1710.severity = none
50+
51+
# Error CA1716: Identifiers should have correct suffix
52+
dotnet_diagnostic.CA1716.severity = none
53+
3954
# Sort using and Import directives with System.* appearing first
4055
dotnet_sort_system_directives_first = true
4156
dotnet_separate_import_directive_groups = false

Jint.Tests/Runtime/EngineTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Esprima.Ast;
55
using Jint.Native;
66
using Jint.Native.Array;
7+
using Jint.Native.Number;
78
using Jint.Native.Object;
89
using Jint.Runtime;
910
using Jint.Runtime.Debugger;
@@ -823,8 +824,8 @@ public void ShouldHandleEscapedSlashesInRegex()
823824
[Fact]
824825
public void ShouldComputeFractionInBase()
825826
{
826-
Assert.Equal("011", _engine.Realm.Intrinsics.Number.PrototypeObject.ToFractionBase(0.375, 2));
827-
Assert.Equal("14141414141414141414141414141414141414141414141414", _engine.Realm.Intrinsics.Number.PrototypeObject.ToFractionBase(0.375, 5));
827+
Assert.Equal("011", NumberPrototype.ToFractionBase(0.375, 2));
828+
Assert.Equal("14141414141414141414141414141414141414141414141414", NumberPrototype.ToFractionBase(0.375, 5));
828829
}
829830

830831
[Fact]
@@ -910,7 +911,7 @@ public void ShouldNotAllowModifyingSharedUndefinedDescriptor()
910911
[InlineData("2qgpckvng1s", 10000000000000000L, 36)]
911912
public void ShouldConvertNumbersToDifferentBase(string expected, long number, int radix)
912913
{
913-
var result = _engine.Realm.Intrinsics.Number.PrototypeObject.ToBase(number, radix);
914+
var result = NumberPrototype.ToBase(number, radix);
914915
Assert.Equal(expected, result);
915916
}
916917

Jint/Constraints/TimeConstraint.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33

44
namespace Jint.Constraints;
55

6+
#pragma warning disable CA1001
67
internal sealed class TimeConstraint : Constraint
8+
#pragma warning restore CA1001
79
{
810
private readonly TimeSpan _timeout;
911
private CancellationTokenSource? _cts;

Jint/Jint.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<ImplicitUsings>enable</ImplicitUsings>
1010
<Nullable>enable</Nullable>
1111
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
12+
<AnalysisLevel>latest-Recommended</AnalysisLevel>
1213
</PropertyGroup>
1314

1415
<PropertyGroup Condition=" '$(TargetFramework)' == 'net6.0' or '$(TargetFramework)' == 'netstandard2.1' ">

Jint/Native/ArrayBuffer/JsArrayBuffer.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ private byte[] CreateByteDataBlock(ulong byteLength)
3737
internal byte[]? ArrayBufferData => _arrayBufferData;
3838

3939
internal bool IsDetachedBuffer => _arrayBufferData is null;
40+
#pragma warning disable CA1822
4041
internal bool IsSharedArrayBuffer => false; // TODO SharedArrayBuffer
42+
#pragma warning restore CA1822
4143

4244
/// <summary>
4345
/// https://tc39.es/ecma262/#sec-detacharraybuffer

Jint/Native/BigInt/BigIntPrototype.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Globalization;
12
using System.Numerics;
23
using Jint.Collections;
34
using Jint.Native.Object;
@@ -55,7 +56,7 @@ private JsValue ToLocaleString(JsValue thisObject, JsValue[] arguments)
5556
var x = ThisBigIntValue(thisObject);
5657
//var numberFormat = (NumberFormat) Construct(_realm.Intrinsics.NumberFormat, new[] { locales, options });
5758
// numberFormat.FormatNumeric(x);
58-
return x._value.ToString("R");
59+
return x._value.ToString("R", CultureInfo.InvariantCulture);
5960
}
6061

6162
/// <summary>
@@ -103,7 +104,7 @@ private JsValue ToBigIntString(JsValue thisObject, JsValue[] arguments)
103104

104105
if (radixMV == 10)
105106
{
106-
return value.ToString("R");
107+
return value.ToString("R", CultureInfo.InvariantCulture);
107108
}
108109

109110
var negative = value < 0;

Jint/Native/Date/DatePrototype.cs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Globalization;
12
using System.Runtime.CompilerServices;
23
using Jint.Collections;
34
using Jint.Native.Object;
@@ -775,9 +776,9 @@ private JsValue ToUtcString(JsValue thisObject, JsValue[] arguments)
775776

776777
var weekday = _dayNames[WeekDay(tv)];
777778
var month = _monthNames[MonthFromTime(tv)];
778-
var day = DateFromTime(tv).ToString("00");
779+
var day = DateFromTime(tv).ToString("00", CultureInfo.InvariantCulture);
779780
var yv = YearFromTime(tv);
780-
var paddedYear = yv.ToString("0000");
781+
var paddedYear = yv.ToString("0000", CultureInfo.InvariantCulture);
781782

782783
return $"{weekday}, {day} {month} {paddedYear} {TimeString(tv)}";
783784
}
@@ -1355,11 +1356,11 @@ private static string DateString(DatePresentation tv)
13551356
var month = _monthNames[MonthFromTime(tv)];
13561357

13571358
var dateFromTime = DateFromTime(tv);
1358-
var day = System.Math.Max(1, dateFromTime).ToString("00");
1359+
var day = System.Math.Max(1, dateFromTime).ToString("00", CultureInfo.InvariantCulture);
13591360
var yv = YearFromTime(tv);
13601361
var yearSign = yv < 0 ? "-" : "";
13611362
var year = System.Math.Abs(yv);
1362-
var paddedYear = year.ToString("0000");
1363+
var paddedYear = year.ToString("0000", CultureInfo.InvariantCulture);
13631364

13641365
return weekday + " " + month + " " + day + " " + yearSign + paddedYear;
13651366
}
@@ -1369,9 +1370,9 @@ private static string DateString(DatePresentation tv)
13691370
/// </summary>
13701371
private static string TimeString(DatePresentation t)
13711372
{
1372-
var hour = HourFromTime(t).ToString("00");
1373-
var minute = MinFromTime(t).ToString("00");
1374-
var second = SecFromTime(t).ToString("00");
1373+
var hour = HourFromTime(t).ToString("00", CultureInfo.InvariantCulture);
1374+
var minute = MinFromTime(t).ToString("00", CultureInfo.InvariantCulture);
1375+
var second = SecFromTime(t).ToString("00", CultureInfo.InvariantCulture);
13751376

13761377
return hour + ":" + minute + ":" + second + " GMT";
13771378
}
@@ -1396,8 +1397,8 @@ private string TimeZoneString(DatePresentation tv)
13961397
absOffset = -1 * offset;
13971398
}
13981399

1399-
var offsetMin = MinFromTime(absOffset).ToString("00");
1400-
var offsetHour = HourFromTime(absOffset).ToString("00");
1400+
var offsetMin = MinFromTime(absOffset).ToString("00", CultureInfo.InvariantCulture);
1401+
var offsetHour = HourFromTime(absOffset).ToString("00", CultureInfo.InvariantCulture);
14011402

14021403
var tzName = " (" + _timeSystem.DefaultTimeZone.StandardName + ")";
14031404

Jint/Native/Date/MimeKit.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ static DateUtils()
180180
any[1] = (char) c;
181181
}
182182

183+
#pragma warning disable CA2249
183184
if (NumericZoneCharacters.IndexOf((char) c) == -1)
184185
datetok[c] |= DateTokenFlags.NonNumericZone;
185186
if (AlphaZoneCharacters.IndexOf((char) c) == -1)
@@ -192,6 +193,7 @@ static DateUtils()
192193
datetok[c] |= DateTokenFlags.NonMonth;
193194
if (TimeCharacters.IndexOf((char) c) == -1)
194195
datetok[c] |= DateTokenFlags.NonTime;
196+
#pragma warning restore CA2249
195197
}
196198

197199
datetok[':'] |= DateTokenFlags.HasColon;
@@ -518,7 +520,9 @@ private static bool TryParseUnknownDateFormat(IList<DateToken> tokens, byte[] te
518520
int endIndex = tokens[i].Start + tokens[i].Length;
519521
int index = tokens[i].Start;
520522

523+
#pragma warning disable CA1806
521524
ParseUtils.TryParseInt32(text, ref index, endIndex, out value);
525+
#pragma warning restore CA1806
522526

523527
if (month == null && value > 0 && value <= 12)
524528
{
@@ -727,7 +731,9 @@ public static bool SkipCommentsAndWhiteSpace(byte[] text, ref int index, int end
727731
if (!SkipComment(text, ref index, endIndex))
728732
{
729733
if (throwOnError)
730-
throw new Exception($"Incomplete comment token at offset {startIndex}");
734+
{
735+
throw new ArgumentException($"Incomplete comment token at offset {startIndex}");
736+
}
731737

732738
return false;
733739
}

Jint/Native/FinalizationRegistry/FinalizationRegistryInstance.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public FinalizationRegistryInstance(Engine engine, Realm realm, ICallable cleanu
1919
_callable = engine._host.MakeJobCallBack(cleanupCallback);
2020
}
2121

22-
public void CleanupFinalizationRegistry(ICallable? callback)
22+
public static void CleanupFinalizationRegistry(ICallable? callback)
2323
{
2424
}
2525

Jint/Native/FinalizationRegistry/FinalizationRegistryPrototype.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ private JsValue CleanupSome(JsValue thisObject, JsValue[] arguments)
9898
ExceptionHelper.ThrowTypeError(_realm, callback + " must be callable");
9999
}
100100

101-
finalizationRegistry.CleanupFinalizationRegistry(callback as ICallable);
101+
FinalizationRegistryInstance.CleanupFinalizationRegistry(callback as ICallable);
102102

103103
return Undefined;
104104
}

Jint/Native/Function/ClassDefinition.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ private static ClassFieldDefinition ClassFieldDefinitionEvaluation(Engine engine
276276

277277
private sealed class ClassFieldFunction : Node, IFunction
278278
{
279-
private readonly NodeList<Node> _nodeList = new();
279+
private readonly NodeList<Node> _nodeList;
280280
private readonly BlockStatement _statement;
281281

282282
public ClassFieldFunction(Expression expression) : base(Nodes.ExpressionStatement)

Jint/Native/Function/ScriptFunctionInstance.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ internal ScriptFunctionInstance(
5757
/// <summary>
5858
/// https://tc39.es/ecma262/#sec-ecmascript-function-objects-call-thisargument-argumentslist
5959
/// </summary>
60-
protected internal override JsValue Call(JsValue thisArgument, JsValue[] arguments)
60+
protected internal override JsValue Call(JsValue thisObject, JsValue[] arguments)
6161
{
6262
var strict = _functionDefinition.Strict || _thisMode == FunctionThisMode.Strict;
6363
using (new StrictModeScope(strict, true))
@@ -71,7 +71,7 @@ protected internal override JsValue Call(JsValue thisArgument, JsValue[] argumen
7171
ExceptionHelper.ThrowTypeError(calleeContext.Realm, $"Class constructor {_functionDefinition.Name} cannot be invoked without 'new'");
7272
}
7373

74-
OrdinaryCallBindThis(calleeContext, thisArgument);
74+
OrdinaryCallBindThis(calleeContext, thisObject);
7575

7676
// actual call
7777
var context = _engine._activeEvaluationContext ?? new EvaluationContext(_engine);

Jint/Native/Global/GlobalObject.cs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ public static JsValue ParseFloat(JsValue thisObject, JsValue[] arguments)
138138
if (trimmedString[0] == '-')
139139
{
140140
i++;
141-
if (trimmedString.Length > 1 && trimmedString[1] == 'I' && trimmedString.StartsWith("-Infinity"))
141+
if (trimmedString.Length > 1 && trimmedString[1] == 'I' && trimmedString.StartsWith("-Infinity", StringComparison.Ordinal))
142142
{
143143
return JsNumber.DoubleNegativeInfinity;
144144
}
@@ -147,18 +147,18 @@ public static JsValue ParseFloat(JsValue thisObject, JsValue[] arguments)
147147
if (trimmedString[0] == '+')
148148
{
149149
i++;
150-
if (trimmedString.Length > 1 && trimmedString[1] == 'I' && trimmedString.StartsWith("+Infinity"))
150+
if (trimmedString.Length > 1 && trimmedString[1] == 'I' && trimmedString.StartsWith("+Infinity", StringComparison.Ordinal))
151151
{
152152
return JsNumber.DoublePositiveInfinity;
153153
}
154154
}
155155

156-
if (trimmedString.StartsWith("Infinity"))
156+
if (trimmedString.StartsWith("Infinity", StringComparison.Ordinal))
157157
{
158158
return JsNumber.DoublePositiveInfinity;
159159
}
160160

161-
if (trimmedString.StartsWith("NaN"))
161+
if (trimmedString.StartsWith("NaN", StringComparison.Ordinal))
162162
{
163163
return JsNumber.DoubleNaN;
164164
}
@@ -462,7 +462,9 @@ private JsValue Decode(string uriString, string? reservedSet)
462462
if ((B & 0x80) == 0)
463463
{
464464
C = (char)B;
465+
#pragma warning disable CA2249
465466
if (reservedSet == null || reservedSet.IndexOf(C) == -1)
467+
#pragma warning restore CA2249
466468
{
467469
_stringBuilder.Append(C);
468470
}
@@ -590,7 +592,7 @@ private static bool IsDigit(char c, int radix, out int result)
590592
/// </summary>
591593
public JsValue Escape(JsValue thisObject, JsValue[] arguments)
592594
{
593-
const string whiteList = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@*_ + -./";
595+
const string WhiteList = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@*_ + -./";
594596
var uriString = TypeConverter.ToString(arguments.At(0));
595597

596598
var strLen = uriString.Length;
@@ -601,17 +603,17 @@ public JsValue Escape(JsValue thisObject, JsValue[] arguments)
601603
for (var k = 0; k < strLen; k++)
602604
{
603605
var c = uriString[k];
604-
if (whiteList.IndexOf(c) != -1)
606+
if (WhiteList.IndexOf(c) != -1)
605607
{
606608
_stringBuilder.Append(c);
607609
}
608610
else if (c < 256)
609611
{
610-
_stringBuilder.Append($"%{((int) c):X2}");
612+
_stringBuilder.Append('%').AppendFormat(CultureInfo.InvariantCulture, "{0:X2}", (int) c);
611613
}
612614
else
613615
{
614-
_stringBuilder.Append($"%u{((int) c):X4}");
616+
_stringBuilder.Append("%u").AppendFormat(CultureInfo.InvariantCulture, "{0:X4}", (int) c);
615617
}
616618
}
617619

@@ -639,18 +641,16 @@ public JsValue Unescape(JsValue thisObject, JsValue[] arguments)
639641
&& uriString[k + 1] == 'u'
640642
&& uriString.Skip(k + 2).Take(4).All(IsValidHexaChar))
641643
{
642-
c = (char)int.Parse(
643-
string.Join(string.Empty, uriString.Skip(k + 2).Take(4)),
644-
NumberStyles.AllowHexSpecifier);
644+
var joined = string.Join(string.Empty, uriString.Skip(k + 2).Take(4));
645+
c = (char) int.Parse(joined, NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture);
645646

646647
k += 5;
647648
}
648649
else if (k <= strLen - 3
649-
&& uriString.Skip(k + 1).Take(2).All(IsValidHexaChar))
650+
&& uriString.Skip(k + 1).Take(2).All(IsValidHexaChar))
650651
{
651-
c = (char)int.Parse(
652-
string.Join(string.Empty, uriString.Skip(k + 1).Take(2)),
653-
NumberStyles.AllowHexSpecifier);
652+
var joined = string.Join(string.Empty, uriString.Skip(k + 1).Take(2));
653+
c = (char) int.Parse(joined, NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture);
654654

655655
k += 2;
656656
}

Jint/Native/Intl/DateTimeFormatConstructor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public override ObjectInstance Construct(JsValue[] arguments, JsValue newTarget)
4848
/// <summary>
4949
/// https://tc39.es/ecma402/#sec-initializedatetimeformat
5050
/// </summary>
51-
private void InitializeDateTimeFormat(JsObject dateTimeFormat, JsValue locales, JsValue options)
51+
private static void InitializeDateTimeFormat(JsObject dateTimeFormat, JsValue locales, JsValue options)
5252
{
5353
// TODO
5454
}

Jint/Native/Intl/NumberFormatConstructor.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -201,16 +201,16 @@ private void SetNumberFormatUnitOptions(JsObject intlObj, JsValue options)
201201
/// <summary>
202202
/// https://tc39.es/ecma402/#sec-iswellformedunitidentifier
203203
/// </summary>
204-
private bool IsWellFormedUnitIdentifier(JsValue unitIdentifier)
204+
private static bool IsWellFormedUnitIdentifier(JsValue unitIdentifier)
205205
{
206206
var value = unitIdentifier.ToString();
207207
if (IsSanctionedSingleUnitIdentifier(value))
208208
{
209209
return true;
210210
}
211211

212-
var i = value.IndexOf("-per-");
213-
if (i == -1 || value.IndexOf("-per-", i + 1) != -1)
212+
var i = value.IndexOf("-per-", StringComparison.Ordinal);
213+
if (i == -1 || value.IndexOf("-per-", i + 1, StringComparison.Ordinal) != -1)
214214
{
215215
return false;
216216
}

Jint/Native/Intl/PluralRulesConstructor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public override ObjectInstance Construct(JsValue[] arguments, JsValue newTarget)
4848
/// <summary>
4949
/// https://tc39.es/ecma402/#sec-initializepluralrules
5050
/// </summary>
51-
private void InitializePluralRules(JsObject pluralRules, JsValue locales, JsValue options)
51+
private static void InitializePluralRules(JsObject pluralRules, JsValue locales, JsValue options)
5252
{
5353
// TODO
5454
}

Jint/Native/Intl/RelativeTimeFormatConstructor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public override ObjectInstance Construct(JsValue[] arguments, JsValue newTarget)
4848
/// <summary>
4949
/// https://tc39.es/ecma402/#sec-InitializeRelativeTimeFormat
5050
/// </summary>
51-
private void InitializeRelativeTimeFormat(JsObject relativeTimeFormat, JsValue locales, JsValue options)
51+
private static void InitializeRelativeTimeFormat(JsObject relativeTimeFormat, JsValue locales, JsValue options)
5252
{
5353
// TODO
5454
}

0 commit comments

Comments
 (0)