/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Workspaces/SharedUtilitiesAndExtensions/Compiler/VisualBasic/Utilities/ImportsClauseComparer.vb
69 строк
3 KB
Manish Vasani
Remove unused usings reported on command line build, but not in the IDE
07 апр 2020, 23:03
07 апр 2020, 23:03
0ed2920
Код
Авторство
О чём код?
' Licensed to the .NET Foundation under one or more agreements. ' The .NET Foundation licenses this file to you under the MIT license. ' See the LICENSE file in the project root for more information. Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Namespace Microsoft.CodeAnalysis.VisualBasic.Utilities Friend Class ImportsClauseComparer Implements IComparer(Of ImportsClauseSyntax) Public Shared ReadOnly NormalInstance As IComparer(Of ImportsClauseSyntax) = New ImportsClauseComparer() Private ReadOnly _nameComparer As IComparer(Of NameSyntax) Private ReadOnly _tokenComparer As IComparer(Of SyntaxToken) Private Sub New() _nameComparer = NameSyntaxComparer.Create(TokenComparer.NormalInstance) _tokenComparer = TokenComparer.NormalInstance End Sub Public Sub New(tokenComparer As IComparer(Of SyntaxToken)) _nameComparer = NameSyntaxComparer.Create(tokenComparer) _tokenComparer = tokenComparer End Sub Friend Function Compare(x As ImportsClauseSyntax, y As ImportsClauseSyntax) As Integer Implements IComparer(Of ImportsClauseSyntax).Compare Dim imports1 = TryCast(x, SimpleImportsClauseSyntax) Dim imports2 = TryCast(y, SimpleImportsClauseSyntax) Dim xml1 = TryCast(x, XmlNamespaceImportsClauseSyntax) Dim xml2 = TryCast(y, XmlNamespaceImportsClauseSyntax) If xml1 IsNot Nothing AndAlso xml2 Is Nothing Then Return 1 ElseIf xml1 Is Nothing AndAlso xml2 IsNot Nothing Then Return -1 ElseIf xml1 IsNot Nothing AndAlso xml2 IsNot Nothing Then Return CompareXmlNames( DirectCast(xml1.XmlNamespace.Name, XmlNameSyntax), DirectCast(xml2.XmlNamespace.Name, XmlNameSyntax)) ElseIf imports1 IsNot Nothing AndAlso imports2 IsNot Nothing Then If imports1.Alias IsNot Nothing AndAlso imports2.Alias Is Nothing Then Return 1 ElseIf imports1.Alias Is Nothing AndAlso imports2.Alias IsNot Nothing Then Return -1 ElseIf imports1.Alias IsNot Nothing AndAlso imports2.Alias IsNot Nothing Then Return _tokenComparer.Compare(imports1.Alias.Identifier, imports2.Alias.Identifier) Else Return _nameComparer.Compare(imports1.Name, imports2.Name) End If End If Return 0 End Function Private Function CompareXmlNames(xmlName1 As XmlNameSyntax, xmlName2 As XmlNameSyntax) As Integer Dim tokens1 = xmlName1.DescendantTokens().Where(Function(t) t.Kind = SyntaxKind.IdentifierToken).ToList() Dim tokens2 = xmlName2.DescendantTokens().Where(Function(t) t.Kind = SyntaxKind.IdentifierToken).ToList() For i = 0 To Math.Min(tokens1.Count - 1, tokens2.Count - 1) Dim compare = _tokenComparer.Compare(tokens1(i), tokens2(i)) If compare <> 0 Then Return compare End If Next Return tokens1.Count - tokens2.Count End Function End Class End Namespace