Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable CA1822 in Visual Studio layer #50569

Merged
merged 28 commits into from
Jan 20, 2022
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
e1e9fa4
Enable CA1822 in Visual Studio layer
Youssef1313 Jan 17, 2021
96b0f6d
Update .editorconfig
Youssef1313 Jan 17, 2021
3c4382c
Fix CA1822 - iteration 1
Youssef1313 Jan 18, 2021
012325b
Fix CA1822 - iteration 2
Youssef1313 Jan 18, 2021
bc63693
Fix CA1822 - iteration 3
Youssef1313 Jan 18, 2021
8bf9c81
Fix CA1822 - iteration 4
Youssef1313 Jan 18, 2021
376b670
Fix CA1822 - iteration 5
Youssef1313 Jan 18, 2021
ec7382b
Fix CA1822 - iteration 6
Youssef1313 Jan 18, 2021
f0ea7a3
Fix CA1822 - iteration 7
Youssef1313 Jan 18, 2021
99befa1
Fix CA1822 - iteration 8
Youssef1313 Jan 18, 2021
de87ad7
Fix CA1822 - iteration 9
Youssef1313 Jan 18, 2021
c768901
Fix CA1822 - iteration 10
Youssef1313 Jan 18, 2021
139a937
Fix CA1822 - iteration 11
Youssef1313 Jan 18, 2021
d1183c9
Fix CA1822 - iteration 12
Youssef1313 Jan 18, 2021
5120f0e
Fix CA1822 - iteration 13
Youssef1313 Jan 18, 2021
55a6db8
Fix CA1822 - iteration 14
Youssef1313 Jan 18, 2021
d476569
Fix CA1822 - iteration 15
Youssef1313 Jan 18, 2021
d09960c
Merge branch 'main' into patch-43
Youssef1313 Jan 14, 2022
2dddbbc
Remove redundant option
Youssef1313 Jan 14, 2022
2ce0f30
Resolve missing conflict
Youssef1313 Jan 14, 2022
e7ad72d
More fixes
Youssef1313 Jan 14, 2022
46d0e54
One more method
Youssef1313 Jan 15, 2022
fad6bfc
Update AbstractCodeCleanUpFixer.cs
Youssef1313 Jan 17, 2022
32d502a
Update CodeDefinitionWindow_InProc.cs
Youssef1313 Jan 18, 2022
a77a092
Update MoveStaticMembersViewModelTest.vb
Youssef1313 Jan 18, 2022
1dc81f8
Update InteractiveWindow_InProc.cs
Youssef1313 Jan 19, 2022
4cae7ce
Update MoveStaticMembersViewModelTest.vb
Youssef1313 Jan 19, 2022
defb193
Update AbstractPersistentStorageTests.cs
Youssef1313 Jan 19, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,6 @@ csharp_style_var_elsewhere = true:warning

[src/{VisualStudio}/**/*.{cs,vb}]
# CA1822: Make member static
# Not enforced as a build 'warning' for 'VisualStudio' layer due to large number of false positives from https://github.com/dotnet/roslyn-analyzers/issues/3857 and https://github.com/dotnet/roslyn-analyzers/issues/3858
# Additionally, there is a risk of accidentally breaking an internal API that partners rely on though IVT.
dotnet_diagnostic.CA1822.severity = suggestion
# There is a risk of accidentally breaking an internal API that partners rely on though IVT.
dotnet_diagnostic.CA1822.severity = warning
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks redundant as it's already specified above, but it's required due to #50577

dotnet_code_quality.CA1822.api_surface = private
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ private void RaiseAnalyzerChangedWarning(ProjectId projectId, string analyzerPat
}
}

private DateTime? GetLastUpdateTimeUtc(string fullPath)
private static DateTime? GetLastUpdateTimeUtc(string fullPath)
{
try
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public CallHierarchyDetail(Location location, Workspace workspace)
_text = ComputeText(location);
}

private string ComputeText(Location location)
private static string ComputeText(Location location)
{
var lineSpan = location.GetLineSpan();
var start = location.SourceTree.GetText().Lines[lineSpan.StartLinePosition.Line].Start;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public async Task<ICallHierarchyMemberItem> CreateItemAsync(ISymbol symbol,
return null;
}

private ISymbol GetTargetSymbol(ISymbol symbol)
private static ISymbol GetTargetSymbol(ISymbol symbol)
{
if (symbol is IMethodSymbol methodSymbol)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ private async Task SearchAsync(Workspace workspace, CallHierarchySearchScope sco
await SearchWorkerAsync(symbol, project, callback, documents, cancellationToken).ConfigureAwait(false);
}

private IImmutableSet<Document> IncludeDocuments(CallHierarchySearchScope scope, Project project)
private static IImmutableSet<Document> IncludeDocuments(CallHierarchySearchScope scope, Project project)
{
if (scope == CallHierarchySearchScope.CurrentDocument || scope == CallHierarchySearchScope.CurrentProject)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public ParameterViewModel(ChangeSignatureDialogViewModel changeSignatureDialogVi
ChangeSignatureDialogViewModel = changeSignatureDialogViewModel;
}

private string ValueOrNone(string value)
private static string ValueOrNone(string value)
{
return !string.IsNullOrEmpty(value)
? value
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ internal partial class ColorSchemeApplier
private class RegistryItem
{
public string SectionName { get; }
public string ValueName => "Data";
public static string ValueName => "Data";
public byte[] ValueData { get; }

public RegistryItem(string sectionName, byte[] valueData)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public ColorSchemeSettings(IServiceProvider serviceProvider, VisualStudioWorkspa
_workspace = visualStudioWorkspace;
}

public ImmutableDictionary<SchemeName, ColorScheme> GetColorSchemes()
public static ImmutableDictionary<SchemeName, ColorScheme> GetColorSchemes()
{
return new[]
{
Expand All @@ -41,13 +41,13 @@ public ImmutableDictionary<SchemeName, ColorScheme> GetColorSchemes()
}.ToImmutableDictionary(name => name, name => GetColorScheme(name));
}

private ColorScheme GetColorScheme(SchemeName schemeName)
private static ColorScheme GetColorScheme(SchemeName schemeName)
{
using var colorSchemeStream = GetColorSchemeXmlStream(schemeName);
return ColorSchemeReader.ReadColorScheme(colorSchemeStream);
}

private Stream GetColorSchemeXmlStream(SchemeName schemeName)
private static Stream GetColorSchemeXmlStream(SchemeName schemeName)
{
var assembly = Assembly.GetExecutingAssembly();
return assembly.GetManifestResourceStream($"Microsoft.VisualStudio.LanguageServices.ColorSchemes.{schemeName}.xml");
Expand All @@ -60,7 +60,7 @@ public void ApplyColorScheme(SchemeName schemeName, ImmutableArray<RegistryItem>
foreach (var item in registryItems)
{
using var itemKey = registryRoot.CreateSubKey(item.SectionName);
itemKey.SetValue(item.ValueName, item.ValueData);
itemKey.SetValue(RegistryItem.ValueName, item.ValueData);
// Flush RegistryKeys out of paranoia
itemKey.Flush();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public ColorSchemeApplier(
_serviceProvider = serviceProvider;

_settings = new ColorSchemeSettings(_serviceProvider, visualStudioWorkspace);
_colorSchemes = _settings.GetColorSchemes();
_colorSchemes = ColorSchemeSettings.GetColorSchemes();
_classificationVerifier = new ClassificationVerifier(threadingContext, serviceProvider, _colorSchemes);

_colorSchemeRegistryItems = new AsyncLazy<ImmutableDictionary<SchemeName, ImmutableArray<RegistryItem>>>(GetColorSchemeRegistryItemsAsync, cacheResult: true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ public void UpdateMembersBasedOnDestinationKind(TypeKind destinationType)
}
}

private void SelectMembers(ImmutableArray<PullMemberUpSymbolViewModel> members, bool isChecked = true)
private static void SelectMembers(ImmutableArray<PullMemberUpSymbolViewModel> members, bool isChecked = true)
{
foreach (var member in members.Where(viewModel => viewModel.IsCheckable))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public bool TryOnAfterGlobalSymbolRenamed(Workspace workspace, IEnumerable<Docum
return true;
}

private ContainedLanguageRenameType GetRenameType(ISymbol symbol)
private static ContainedLanguageRenameType GetRenameType(ISymbol symbol)
{
if (symbol is INamespaceSymbol)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ private void SetupImmediateWindowProjectionBuffer()
}
}

private int GetQuestionIndex(string text)
private static int GetQuestionIndex(string text)
{
for (var i = 0; i < text.Length; i++)
{
Expand All @@ -269,7 +269,7 @@ private int GetQuestionIndex(string text)
return -1;
}

private bool IsImmediateWindow(IVsUIShell shellService, IVsTextView textView)
private static bool IsImmediateWindow(IVsUIShell shellService, IVsTextView textView)
{
Marshal.ThrowExceptionForHR(shellService.GetToolWindowEnum(out var windowEnum));
Marshal.ThrowExceptionForHR(textView.GetBuffer(out _));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ private async Task NotifyProjectSystemAsync(
await Task.WhenAll(tasks).ConfigureAwait(false);
}

private void AddFilteredInfos(ImmutableArray<DesignerAttributeData> data, ArrayBuilder<DesignerAttributeData> filteredData)
private static void AddFilteredInfos(ImmutableArray<DesignerAttributeData> data, ArrayBuilder<DesignerAttributeData> filteredData)
{
using var _ = PooledHashSet<DocumentId>.GetInstance(out var seenDocumentIds);

Expand Down Expand Up @@ -279,7 +279,7 @@ private async Task NotifyCpsProjectSystemAsync(
await Task.WhenAll(tasks).ConfigureAwait(false);
}

private async Task NotifyCpsProjectSystemAsync(
private static async Task NotifyCpsProjectSystemAsync(
IProjectItemDesignerTypeUpdateService updateService,
DesignerAttributeData data,
CancellationToken cancellationToken)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ public IReadOnlyDictionary<string, IEnumerable<DiagnosticDescriptor>> GetAllDiag
}
}

private IReadOnlyDictionary<string, IEnumerable<DiagnosticDescriptor>> Transform(
private static IReadOnlyDictionary<string, IEnumerable<DiagnosticDescriptor>> Transform(
ImmutableDictionary<string, ImmutableArray<DiagnosticDescriptor>> map)
{
// unfortunately, we had to do this since ruleset editor and us are set to use this signature
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ private DiagnosticMode ComputeDiagnosticMode(Option2<DiagnosticMode> option)
return _workspace.Options.GetOption(option);
}

private bool IsInCodeSpacesServer()
private static bool IsInCodeSpacesServer()
{
// hack until there is an officially supported free-threaded synchronous platform API to ask this question.
return Environment.GetEnvironmentVariable("VisualStudioServerMode") == "1";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ private bool TryAdjustSpanIfNeededForVenus(
return startChanged || endChanged;
}

private LinePositionSpan GetLinePositionSpan(LinePosition position1, LinePosition position2)
private static LinePositionSpan GetLinePositionSpan(LinePosition position1, LinePosition position2)
{
if (position1 <= position2)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ private DisposableToolTip CreateDisposableToolTip(Document document, TextSpan so
return controlService.CreateDisposableToolTip(document, textBuffer, contentSpan, EnvironmentColors.ToolWindowBackgroundBrushKey);
}

private void SetStaticClassifications(ITextBuffer textBuffer, ImmutableArray<ClassifiedSpan> classifiedSpans)
private static void SetStaticClassifications(ITextBuffer textBuffer, ImmutableArray<ClassifiedSpan> classifiedSpans)
{
var key = PredefinedPreviewTaggerKeys.StaticClassificationSpansKey;
textBuffer.Properties.RemoveProperty(key);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -692,7 +692,7 @@ internal void UpdateFileNameExtension()
this.FileName = currentFileName;
}

private string UpdateExtension(string currentFileName, string desiredFileExtension, string undesiredFileExtension)
private static string UpdateExtension(string currentFileName, string desiredFileExtension, string undesiredFileExtension)
{
if (currentFileName.EndsWith(desiredFileExtension, StringComparison.OrdinalIgnoreCase))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ private IOleUndoManager GetUndoManager(ITextBuffer subjectBuffer)
return null;
}

private IEnumerable<IOleUndoUnit> GetUndoUnits(IOleUndoManager undoManager)
private static IEnumerable<IOleUndoUnit> GetUndoUnits(IOleUndoManager undoManager)
{
IEnumOleUndoUnits undoUnitEnumerator;
try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ private void ConditionallyCollapseOutliningRegions(IVsTextView textView, IWpfTex
}
}

private bool ContainsRegionTag(ITextSnapshot textSnapshot)
private static bool ContainsRegionTag(ITextSnapshot textSnapshot)
{
foreach (var line in textSnapshot.Lines)
{
Expand All @@ -281,7 +281,7 @@ private bool ContainsRegionTag(ITextSnapshot textSnapshot)
return false;
}

private bool StartsWithRegionTag(ITextSnapshotLine line)
private static bool StartsWithRegionTag(ITextSnapshotLine line)
{
var start = line.GetFirstNonWhitespacePosition();
if (start != null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -443,14 +443,14 @@ private void BuildXmlDocumentation(ISymbol symbol, Compilation compilation)
}
}

private bool ShowReturnsDocumentation(ISymbol symbol)
private static bool ShowReturnsDocumentation(ISymbol symbol)
{
return (symbol.Kind == SymbolKind.NamedType && ((INamedTypeSymbol)symbol).TypeKind == TypeKind.Delegate)
|| symbol.Kind == SymbolKind.Method
|| symbol.Kind == SymbolKind.Property;
}

private bool ShowValueDocumentation(ISymbol symbol)
private static bool ShowValueDocumentation(ISymbol symbol)
{
// <returns> is often used in places where <value> was originally intended. Allow either to be used in
// documentation comments since they are not likely to be used together and it's not clear which one a
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ private static bool IncludeMemberSymbol(ISymbol symbol, IAssemblySymbol assembly
return false;
}

private ImmutableArray<ObjectListItem> CreateListItemsFromSymbols<TSymbol>(
private static ImmutableArray<ObjectListItem> CreateListItemsFromSymbols<TSymbol>(
ImmutableArray<TSymbol> symbols,
Compilation compilation,
ProjectId projectId,
Expand Down Expand Up @@ -313,7 +313,7 @@ private ImmutableArray<ObjectListItem> GetMemberListItems(
return builder.ToImmutable();
}

private ImmutableArray<ISymbol> GetMemberSymbols(INamedTypeSymbol namedTypeSymbol, Compilation compilation)
private static ImmutableArray<ISymbol> GetMemberSymbols(INamedTypeSymbol namedTypeSymbol, Compilation compilation)
{
var members = namedTypeSymbol.GetMembers();
var symbolBuilder = ImmutableArray.CreateBuilder<ISymbol>(members.Length);
Expand All @@ -329,7 +329,7 @@ private ImmutableArray<ISymbol> GetMemberSymbols(INamedTypeSymbol namedTypeSymbo
return symbolBuilder.ToImmutable();
}

private ImmutableArray<ISymbol> GetInheritedMemberSymbols(INamedTypeSymbol namedTypeSymbol, Compilation compilation)
private static ImmutableArray<ISymbol> GetInheritedMemberSymbols(INamedTypeSymbol namedTypeSymbol, Compilation compilation)
{
var symbolBuilder = ImmutableArray.CreateBuilder<ISymbol>();

Expand Down Expand Up @@ -373,7 +373,7 @@ private ImmutableArray<ISymbol> GetInheritedMemberSymbols(INamedTypeSymbol named
return symbolBuilder.ToImmutable();
}

private void AddOverriddenMembers(INamedTypeSymbol namedTypeSymbol, ref HashSet<ISymbol> overriddenMembers)
private static void AddOverriddenMembers(INamedTypeSymbol namedTypeSymbol, ref HashSet<ISymbol> overriddenMembers)
{
foreach (var member in namedTypeSymbol.GetMembers())
{
Expand Down Expand Up @@ -539,7 +539,7 @@ public ImmutableHashSet<Tuple<ProjectId, IAssemblySymbol>> GetAssemblySet(Projec
return set.ToImmutable();
}

private bool ContainsAccessibleTypeMember(INamespaceOrTypeSymbol namespaceOrTypeSymbol, IAssemblySymbol assemblySymbol)
private static bool ContainsAccessibleTypeMember(INamespaceOrTypeSymbol namespaceOrTypeSymbol, IAssemblySymbol assemblySymbol)
{
foreach (var typeMember in namespaceOrTypeSymbol.GetTypeMembers())
{
Expand All @@ -552,7 +552,7 @@ private bool ContainsAccessibleTypeMember(INamespaceOrTypeSymbol namespaceOrType
return false;
}

private ImmutableArray<INamedTypeSymbol> GetAccessibleTypeMembers(INamespaceOrTypeSymbol namespaceOrTypeSymbol, IAssemblySymbol assemblySymbol)
private static ImmutableArray<INamedTypeSymbol> GetAccessibleTypeMembers(INamespaceOrTypeSymbol namespaceOrTypeSymbol, IAssemblySymbol assemblySymbol)
{
var typeMembers = namespaceOrTypeSymbol.GetTypeMembers();
var builder = ImmutableArray.CreateBuilder<INamedTypeSymbol>(typeMembers.Length);
Expand All @@ -568,7 +568,7 @@ private ImmutableArray<INamedTypeSymbol> GetAccessibleTypeMembers(INamespaceOrTy
return builder.ToImmutable();
}

private bool IncludeTypeMember(INamedTypeSymbol typeMember, IAssemblySymbol assemblySymbol)
private static bool IncludeTypeMember(INamedTypeSymbol typeMember, IAssemblySymbol assemblySymbol)
{
if (!IncludeSymbol(typeMember))
{
Expand Down Expand Up @@ -670,7 +670,7 @@ public ImmutableArray<ObjectListItem> GetReferenceListItems(ObjectListItem paren
return builder.ToImmutableAndFree();
}

private ImmutableArray<INamedTypeSymbol> GetAccessibleTypes(INamespaceSymbol namespaceSymbol, Compilation compilation)
private static ImmutableArray<INamedTypeSymbol> GetAccessibleTypes(INamespaceSymbol namespaceSymbol, Compilation compilation)
{
var typeMembers = GetAccessibleTypeMembers(namespaceSymbol, compilation.Assembly);
var builder = ImmutableArray.CreateBuilder<INamedTypeSymbol>(typeMembers.Length);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -505,7 +505,7 @@ protected override bool TryExec(Guid commandGroup, uint commandId)
return false;
}

private async Task FindReferencesAsync(
private static async Task FindReferencesAsync(
IStreamingFindUsagesPresenter presenter, SymbolListItem symbolListItem, Project project)
{
try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public void LogException(object source, Exception exception)
}
}

private bool ShouldReportCrashDumps(object source) => HasRoslynPublicKey(source);
private static bool ShouldReportCrashDumps(object source) => HasRoslynPublicKey(source);

private static string ToLogFormat(Exception exception)
=> exception.Message + Environment.NewLine + exception.StackTrace;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ public bool TryFetch(OptionKey optionKey, out object value)
return true;
}

private bool DeserializeCodeStyleOption(ref object value, Type type)
private static bool DeserializeCodeStyleOption(ref object value, Type type)
{
if (value is string serializedValue)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ private ChangeList GetEntireDocumentAsSpanChange(TextDocument document)
return new ChangeList(new[] { entireSpanChild });
}

private string GetDisplayText(string excerpt)
private static string GetDisplayText(string excerpt)
{
if (excerpt.Contains("\r\n"))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public Solution GetUpdatedSolution(bool applyingChanges)
return solution;
}

private Solution ApplyFileChanges(Solution solution, IEnumerable<FileChange> fileChanges, bool applyingChanges)
private static Solution ApplyFileChanges(Solution solution, IEnumerable<FileChange> fileChanges, bool applyingChanges)
{
foreach (var fileChange in fileChanges)
{
Expand Down Expand Up @@ -179,7 +179,7 @@ void ApplyFileChangesCore(
}
}

private Solution ApplyReferenceChanges(Solution solution, IEnumerable<ReferenceChange> referenceChanges)
private static Solution ApplyReferenceChanges(Solution solution, IEnumerable<ReferenceChange> referenceChanges)
{
foreach (var referenceChange in referenceChanges)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ object IPreviewPaneService.GetPreviewPane(DiagnosticData data, IReadOnlyList<obj
optionPageGuid: optionPageGuid);
}

private Guid GetOptionPageGuidForOptionName(string optionName, string optionLanguage)
private static Guid GetOptionPageGuidForOptionName(string optionName, string optionLanguage)
{
if (optionName == nameof(NamingStyleOptions.NamingPreferences))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public string Label(GraphObject graphObject, string graphCommandDefinitionIdenti
RoslynGraphProperties.FormattedLabelWithContainingSymbol);
}

private string GetStringPropertyForGraphObject(GraphObject graphObject, string graphCommandDefinitionIdentifier, GraphProperty propertyWithoutContainingSymbol, GraphProperty propertyWithContainingSymbol)
private static string GetStringPropertyForGraphObject(GraphObject graphObject, string graphCommandDefinitionIdentifier, GraphProperty propertyWithoutContainingSymbol, GraphProperty propertyWithContainingSymbol)
{

if (graphObject is GraphNode graphNode)
Expand Down
Loading