' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. Imports Microsoft.CodeAnalysis Imports Microsoft.CodeAnalysis.Test.Utilities Imports Microsoft.CodeAnalysis.Text Imports Microsoft.CodeAnalysis.VisualBasic Imports Microsoft.CodeAnalysis.VisualBasic.Symbols Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Imports Roslyn.Test.Utilities Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests.Semantics Public Class GetUnusedImportDirectivesTests Inherits SemanticModelTestBase Public Sub TestLinq() Dim compilation = CreateCompilationWithMscorlibAndReferences( Imports System.Linq Imports System.IO Class Program Sub Main(args As String()) Dim q = From s In {} Select s End Sub End Class , {SystemCoreRef}) compilation.AssertTheseDiagnostics( BC50001: Unused import statement. Imports System.IO ~~~~~~~~~~~~~~~~~ , suppressInfos:=False) End Sub Public Sub TestSpeculativeBindingDoesNotAffectUsedUsings() Dim compilation = CreateCompilationWithMscorlib( Imports System Public Class Blah Sub Foo() Foo() ' Comment End Sub End Class ) Dim tree = compilation.SyntaxTrees(0) Dim model = compilation.GetSemanticModel(tree) Dim position = tree.GetText().ToString().IndexOf("' Comment", StringComparison.Ordinal) model.GetSpeculativeSymbolInfo(position, SyntaxFactory.IdentifierName("Console"), SpeculativeBindingOption.BindAsTypeOrNamespace) compilation.AssertTheseDiagnostics( BC50001: Unused import statement. Imports System ~~~~~~~~~~~~~~ , suppressInfos:=False) End Sub Public Sub AllAssemblyLevelAttributesMustBeBound() Dim snkPath = Temp.CreateFile().WriteAllBytes(TestResources.General.snKey).Path Dim ivtCompilation = CreateCompilationWithMscorlibAndVBRuntimeAndReferences( Namespace NamespaceContainingInternalsOnly Friend Module Extensions Sub Foo(x As Integer) End Sub End Module End Namespace ]]> <%= snkPath %> ]]> , additionalRefs:={SystemCoreRef}, options:=TestOptions.ReleaseDll.WithStrongNameProvider(New DesktopStrongNameProvider())) Dim libCompilation = CreateCompilationWithMscorlibAndReferences( Imports NamespaceContainingInternalsOnly Public Class C Shared Sub F(x As Integer) x.Foo() End Sub End Class <%= snkPath %> ]]> , references:={ivtCompilation.ToMetadataReference()}, options:=TestOptions.ReleaseDll.WithStrongNameProvider(New DesktopStrongNameProvider())) Dim tree = libCompilation.SyntaxTrees(0) Dim model = libCompilation.GetSemanticModel(tree) libCompilation.VerifyDiagnostics() End Sub Public Sub TestAssemblyImport1() Dim compilation = CreateCompilationWithMscorlib( Friend Class Class1 End Class ]]> ) Dim tree = compilation.SyntaxTrees(0) Dim model = compilation.GetSemanticModel(tree) compilation.AssertTheseDiagnostics(, suppressInfos:=False) End Sub Public Sub TestAssemblyImport2() Dim compilation = CreateCompilationWithMscorlib( Friend Class Class1 End Class ]]> ) Dim tree = compilation.SyntaxTrees(0) Dim model = compilation.GetSemanticModel(tree) compilation.AssertTheseDiagnostics( BC50001: Unused import statement. Imports System.Runtime.CompilerServices ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ , suppressInfos:=False) 'Assert.Equal(1, unusedImports.Count) End Sub Public Sub SemanticModelCallDoesNotCountsAsUse() Dim compilation = CreateCompilationWithMscorlib( ) Dim tree = compilation.SyntaxTrees.Single() Dim model = compilation.GetSemanticModel(tree) ' Looks in the usings, but does not count as "use". Assert.Equal(2, model.LookupNamespacesAndTypes(tree.ToString().IndexOf("Return", StringComparison.Ordinal), name:="IEnumerable").Length) compilation.AssertTheseDiagnostics( BC50001: Unused import statement. Imports System.Collections ~~~~~~~~~~~~~~~~~~~~~~~~~~ BC50001: Unused import statement. Imports System.Collections.Generic ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ , suppressInfos:=False) End Sub Public Sub INF_UnusedImportStatement_Single() Dim compilation = CreateCompilationWithMscorlib( ) compilation.AssertTheseDiagnostics( BC50001: Unused import statement. Imports System ~~~~~~~~~~~~~~ , suppressInfos:=False) End Sub Public Sub INF_UnusedImportStatement_Multiple() Dim compilation = CreateCompilationWithMscorlib( ) compilation.AssertTheseDiagnostics( BC50001: Unused import statement. Imports System, System.Diagnostics ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ , suppressInfos:=False) End Sub Public Sub INF_UnusedImportClause_Single() Dim compilation = CreateCompilationWithMscorlib( ) compilation.AssertTheseDiagnostics( BC50000: Unused import clause. Imports System, System.Diagnostics ~~~~~~~~~~~~~~~~~~ , suppressInfos:=False) End Sub Public Sub INF_UnusedImportClause_Multiple() Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( ) compilation.AssertTheseDiagnostics( BC50000: Unused import clause. Imports System, System.Diagnostics, System.Collections ~~~~~~ BC50000: Unused import clause. Imports System, System.Diagnostics, System.Collections ~~~~~~~~~~~~~~~~~~ , suppressInfos:=False) End Sub Public Sub CrefCountsAsUse() Dim source = Class A End Class ]]> ' Without doc comments. CreateCompilationWithMscorlib(source, parseOptions:=New VisualBasicParseOptions(documentationMode:=DocumentationMode.None)).AssertTheseDiagnostics( BC50001: Unused import statement. Imports System ~~~~~~~~~~~~~~ , suppressInfos:=False) ' With doc comments. CreateCompilationWithMscorlib(source, parseOptions:=New VisualBasicParseOptions(documentationMode:=DocumentationMode.Diagnose)).AssertTheseDiagnostics(, suppressInfos:=False) End Sub Public Sub UnusedImportInteractive() Dim tree = Parse("Imports System", options:=TestOptions.Interactive) Dim compilation = VisualBasicCompilation.CreateSubmission("sub1", tree, {MscorlibRef_v4_0_30316_17626}) compilation.AssertNoDiagnostics(suppressInfos:=False) End Sub Public Sub UnusedImportScript() Dim tree = Parse("Imports System", options:=TestOptions.Script) Dim compilation = CreateCompilationWithMscorlib(tree) compilation.AssertTheseDiagnostics( BC50001: Unused import statement. Imports System ~~~~~~~~~~~~~~ , suppressInfos:=False) End Sub End Class End Namespace