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

Clean up #8536

Merged
merged 3 commits into from
Mar 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ csharp_indent_case_contents = true
csharp_indent_case_contents_when_block = true
csharp_indent_switch_labels = true
csharp_indent_labels = one_less_than_current
csharp_using_directive_placement = inside_namespace

# Modifier preferences
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,4 @@ launchSettings.json
*.sublime-workspace
*.nuget.targets
*.code-workspace
*.binlog
51 changes: 51 additions & 0 deletions Directory.Build.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<Project>
<PropertyGroup>
<TargetFrameworks>net6.0;net7.0</TargetFrameworks>
<LangVersion>Latest</LangVersion>
</PropertyGroup>

<PropertyGroup>
<!--
Suppress warnings similar to the following:
warning CS0612: 'StringHelper.LegacyEscapeMarkdown(string)' is obsolete
-->
<NoWarn>$(NoWarn);CS0612</NoWarn>
<!--
Suppress warnings similar to the following:
warning CS0618: 'MarkdownLHeadingBlockRule.LHeading' is obsolete: 'Please use LHeadingMatcher.'
-->
<NoWarn>$(NoWarn);CS0618</NoWarn>

<NoWarn>$(NoWarn);NU1701</NoWarn>
</PropertyGroup>

<PropertyGroup Condition=" '$(IsPackable)' == 'true' ">
<ContentTargetFolders>contentFiles</ContentTargetFolders>
<ContinuousIntegrationBuild Condition="'$(GITHUB_ACTIONS)' == 'true'">true</ContinuousIntegrationBuild>

<PublishRepositoryUrl>true</PublishRepositoryUrl>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<EmbedUntrackedSources>true</EmbedUntrackedSources>

<Authors>Microsoft</Authors>
<Company>Microsoft</Company>
<Copyright>© Microsoft Corporation. All rights reserved.</Copyright>

<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageProjectUrl>https://github.com/dotnet/docfx</PackageProjectUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>

<ItemGroup Condition=" '$(IsPackable)' == 'true' ">
<None Include="$(MSBuildThisFileDirectory)\README.md" Pack="true" PackagePath="\"/>
</ItemGroup>

<ItemGroup Condition=" '$(IsPackable)' == 'true' ">
<PackageReference Include="Microsoft.SourceLink.GitHub">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>

</Project>
44 changes: 44 additions & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<Project>
<!-- See https://learn.microsoft.com/nuget/consume-packages/Central-Package-Management -->
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>

<ItemGroup>
<PackageVersion Include="CommandLineParser" Version="1.9.71" />
<PackageVersion Include="HtmlAgilityPack" Version="1.11.46" />
<PackageVersion Include="ICSharpCode.Decompiler" Version="8.0.0.7246-preview3" />
<PackageVersion Include="iTextSharp" Version="5.5.13.3" />
<PackageVersion Include="Jint" Version="3.0.0-beta-2048" />
<PackageVersion Include="JsonSchema.Net" Version="4.0.0" />
<PackageVersion Include="Markdig" Version="0.31.0" />
<PackageVersion Include="Microsoft.Build" Version="17.5.0" />
<PackageVersion Include="Microsoft.Build.Locator" Version="1.5.5" />
<PackageVersion Include="Microsoft.CodeAnalysis" Version="4.5.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.Common" Version="4.5.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.5.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.5.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.VisualBasic.Workspaces" Version="4.5.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.VisualBasic" Version="4.5.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.Workspaces.Common" Version="4.5.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="4.5.0" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="1.1.1" />
Copy link
Contributor

@WeihanLi WeihanLi Mar 21, 2023

Choose a reason for hiding this comment

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

Copy link
Contributor

@yufeih yufeih Mar 21, 2023

Choose a reason for hiding this comment

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

Aha, I don't have a strong opinion, with a slight preference of NOT using central package version management because I can just copy and paste from NuGet.org and let @dependabot take care of the rest😁

Copy link
Member Author

@RussKie RussKie Mar 21, 2023

Choose a reason for hiding this comment

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

I actually never seen that property. Though, according to the docs it's appropriate for references that apply to all projects. Not sure, if any of these truly do.

Copy link
Contributor

Choose a reason for hiding this comment

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

Looks good from my side, I'm using this in my project and the NuGet package has source link info also https://www.nuget.info/packages/dotnet-execute/0.13.0.

image

<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
<PackageVersion Include="Stubble.Core" Version="1.10.8" />
<PackageVersion Include="System.Collections.Immutable" Version="6.0.0" />
<PackageVersion Include="System.Composition" Version="7.0.0" />
<PackageVersion Include="System.Configuration.ConfigurationManager" Version="7.0.0" />
<PackageVersion Include="YamlDotNet" Version="13.0.2" />

<!-- Test only -->
<PackageVersion Include="coverlet.collector" Version="3.2.0" />
<PackageVersion Include="Magick.NET-Q16-AnyCPU" Version="13.0.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageVersion Include="Microsoft.Playwright" Version="1.31.1" />
<PackageVersion Include="NuGet.Frameworks" Version="6.5.0" />
<PackageVersion Include="Verify.DiffPlex" Version="2.2.0" />
<PackageVersion Include="Verify.Xunit" Version="19.11.1" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.4.5" />
<PackageVersion Include="xunit" Version="2.4.2" />
</ItemGroup>
</Project>
34 changes: 1 addition & 33 deletions plugins/Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,35 +1,3 @@
<Project>
<PropertyGroup>
<TargetFrameworks>net6.0;net7.0</TargetFrameworks>
<LangVersion>Latest</LangVersion>
</PropertyGroup>

<PropertyGroup>
<ContentTargetFolders>contentFiles</ContentTargetFolders>
<ContinuousIntegrationBuild Condition="'$(GITHUB_ACTIONS)' == 'true'">true</ContinuousIntegrationBuild>

<PublishRepositoryUrl>true</PublishRepositoryUrl>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<EmbedUntrackedSources>true</EmbedUntrackedSources>

<Authors>Microsoft</Authors>
<Company>Microsoft</Company>
<Copyright>© Microsoft Corporation. All rights reserved.</Copyright>

<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageProjectUrl>https://github.com/dotnet/docfx</PackageProjectUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>

<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)\..\README.md" Pack="true" PackagePath="\"/>
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />
</Project>
34 changes: 1 addition & 33 deletions src/Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,39 +1,7 @@
<Project>
<PropertyGroup>
<TargetFrameworks>net6.0;net7.0</TargetFrameworks>
<LangVersion>Latest</LangVersion>
</PropertyGroup>

<PropertyGroup>
<ContentTargetFolders>contentFiles</ContentTargetFolders>
<ContinuousIntegrationBuild Condition="'$(GITHUB_ACTIONS)' == 'true'">true</ContinuousIntegrationBuild>
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />

<PublishRepositoryUrl>true</PublishRepositoryUrl>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<EmbedUntrackedSources>true</EmbedUntrackedSources>

<Authors>Microsoft</Authors>
<Company>Microsoft</Company>
<Copyright>© Microsoft Corporation. All rights reserved.</Copyright>

<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageProjectUrl>https://github.com/dotnet/docfx</PackageProjectUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>

<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)\..\README.md" Pack="true" PackagePath="\"/>
</ItemGroup>

<ItemGroup>
<InternalsVisibleTo Include="$(AssemblyName).Tests" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="HtmlAgilityPack" Version="1.11.46" />
<PackageReference Include="System.Composition" Version="7.0.0" />
<PackageReference Include="HtmlAgilityPack" />
<PackageReference Include="System.Composition" />
</ItemGroup>

</Project>
5 changes: 0 additions & 5 deletions src/Microsoft.DocAsCode.Build.Engine/DocumentBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@ public void Build(IList<DocumentBuildParameters> parameters, string outputDirect
try
{
var manifests = new List<Manifest>();
bool transformDocument = false;
if (parameters.All(p => p.Files.Count == 0))
{
Logger.LogSuggestion(
Expand Down Expand Up @@ -119,10 +118,6 @@ public void Build(IList<DocumentBuildParameters> parameters, string outputDirect
}
}
EnvironmentContext.FileAbstractLayerImpl = falBuilder.Create();
if (parameter.ApplyTemplateSettings.TransformDocument)
{
transformDocument = true;
}

if (parameter.Files.Count == 0)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<InternalsVisibleTo Include="Microsoft.DocAsCode.Build.Common.Tests" />
</ItemGroup>
Expand All @@ -16,8 +16,8 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Jint" Version="3.0.0-beta-2048" />
<PackageReference Include="Stubble.Core" Version="1.10.8" />
<PackageReference Include="Jint" />
<PackageReference Include="Stubble.Core" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="Markdig" Version="0.31.0" />
<PackageReference Include="Markdig" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="JsonSchema.Net" Version="4.0.0" />
<PackageReference Include="Markdig" Version="0.31.0" />
<PackageReference Include="JsonSchema.Net" />
<PackageReference Include="Markdig" />
</ItemGroup>
</Project>
2 changes: 1 addition & 1 deletion src/Microsoft.DocAsCode.Dfm/Microsoft.DocAsCode.Dfm.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="HtmlAgilityPack" Version="1.11.46" />
<PackageReference Include="HtmlAgilityPack" />
</ItemGroup>
</Project>
24 changes: 12 additions & 12 deletions src/Microsoft.DocAsCode.Dotnet/Microsoft.DocAsCode.Dotnet.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,17 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="ICSharpCode.Decompiler" Version="8.0.0.7246-preview3" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="7.0.0" />
<PackageReference Include="Microsoft.Build" Version="17.5.0" ExcludeAssets="runtime" />
<PackageReference Include="Microsoft.Build.Locator" Version="1.5.5" />
<PackageReference Include="Microsoft.CodeAnalysis" Version="4.5.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.5.0" />
<PackageReference Include="Microsoft.CodeAnalysis.VisualBasic" Version="4.5.0" />
<PackageReference Include="Microsoft.CodeAnalysis.VisualBasic.Workspaces" Version="4.5.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.5.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.5.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.Common" Version="4.5.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="4.5.0" />
<PackageReference Include="ICSharpCode.Decompiler" />
<PackageReference Include="System.Configuration.ConfigurationManager" />
<PackageReference Include="Microsoft.Build" ExcludeAssets="runtime" />
<PackageReference Include="Microsoft.Build.Locator" />
<PackageReference Include="Microsoft.CodeAnalysis" />
<PackageReference Include="Microsoft.CodeAnalysis.Common" />
<PackageReference Include="Microsoft.CodeAnalysis.VisualBasic" />
<PackageReference Include="Microsoft.CodeAnalysis.VisualBasic.Workspaces" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" />
<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.Common" />
<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" />
</ItemGroup>
</Project>
10 changes: 8 additions & 2 deletions src/Microsoft.DocAsCode.Dotnet/SymbolFormatter.Symbols.cs
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,9 @@ private class ParameterSymbol : IParameterSymbol
ISymbol ISymbol.OriginalDefinition => throw new NotImplementedException();

public void Accept(SymbolVisitor visitor) => visitor.VisitParameter(this);
#nullable enable
public TResult? Accept<TResult>(SymbolVisitor<TResult> visitor) => throw new NotImplementedException();
#nullable disable
public TResult Accept<TArgument, TResult>(SymbolVisitor<TArgument, TResult> visitor, TArgument argument) => throw new NotImplementedException();
public bool Equals([NotNullWhen(true)] ISymbol other, SymbolEqualityComparer equalityComparer) => throw new NotImplementedException();
public bool Equals(ISymbol other) => throw new NotImplementedException();
Expand Down Expand Up @@ -194,10 +196,12 @@ private class PropertySymbol : IPropertySymbol
ISymbol ISymbol.OriginalDefinition => ((ISymbol)Inner).OriginalDefinition;

public void Accept(SymbolVisitor visitor) => visitor.VisitProperty(this);
#nullable enable
public TResult? Accept<TResult>(SymbolVisitor<TResult> visitor) => visitor.VisitProperty(this);
#nullable disable
public TResult Accept<TArgument, TResult>(SymbolVisitor<TArgument, TResult> visitor, TArgument argument) => visitor.VisitProperty(this, argument);
public bool Equals([NotNullWhen(true)] ISymbol other, SymbolEqualityComparer equalityComparer) => Inner.Equals(other, equalityComparer);
public bool Equals(ISymbol other) => Inner.Equals(other);
public bool Equals(ISymbol other) => Inner.Equals(other, SymbolEqualityComparer.Default);
public ImmutableArray<AttributeData> GetAttributes() => Inner.GetAttributes();
public string GetDocumentationCommentId() => Inner.GetDocumentationCommentId();
public string GetDocumentationCommentXml(CultureInfo preferredCulture = null, bool expandIncludes = false, CancellationToken cancellationToken = default) => Inner.GetDocumentationCommentXml(preferredCulture, expandIncludes, cancellationToken);
Expand Down Expand Up @@ -336,12 +340,14 @@ public class MethodSymbol : IMethodSymbol
ISymbol ISymbol.OriginalDefinition => ((ISymbol)Inner).OriginalDefinition;

public void Accept(SymbolVisitor visitor) => Inner.Accept(visitor);
#nullable enable
public TResult? Accept<TResult>(SymbolVisitor<TResult> visitor) => Inner.Accept(visitor);
#nullable disable
public TResult Accept<TArgument, TResult>(SymbolVisitor<TArgument, TResult> visitor, TArgument argument) => Inner.Accept(visitor, argument);
public IMethodSymbol Construct(params ITypeSymbol[] typeArguments) => Inner.Construct(typeArguments);
public IMethodSymbol Construct(ImmutableArray<ITypeSymbol> typeArguments, ImmutableArray<NullableAnnotation> typeArgumentNullableAnnotations) => Inner.Construct(typeArguments, typeArgumentNullableAnnotations);
public bool Equals([NotNullWhen(true)] ISymbol other, SymbolEqualityComparer equalityComparer) => Inner.Equals(other, equalityComparer);
public bool Equals(ISymbol other) => Inner.Equals(other);
public bool Equals(ISymbol other) => Inner.Equals(other, SymbolEqualityComparer.Default);
public ImmutableArray<AttributeData> GetAttributes() => Inner.GetAttributes();
public DllImportData GetDllImportData() => Inner.GetDllImportData();
public string GetDocumentationCommentId() => Inner.GetDocumentationCommentId();
Expand Down
10 changes: 5 additions & 5 deletions src/Microsoft.DocAsCode.Dotnet/Visitors/SymbolVisitorAdapter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ internal class SymbolVisitorAdapter : SymbolVisitor<MetadataItem>

#region Constructor

public SymbolVisitorAdapter(YamlModelGenerator generator, ExtractMetadataConfig options, SymbolFilter filter, IMethodSymbol[] extensionMethods )
public SymbolVisitorAdapter(YamlModelGenerator generator, ExtractMetadataConfig options, SymbolFilter filter, IMethodSymbol[] extensionMethods)
{
_generator = generator;
_preserveRawInlineComments = options.PreserveRawInlineComments;
Expand Down Expand Up @@ -581,7 +581,7 @@ private void GenerateInheritance(INamedTypeSymbol symbol, MetadataItem item)
break;
}

if (type != symbol)
if (!type.Equals(symbol, SymbolEqualityComparer.Default))
{
inheritance.Add(AddSpecReference(type, typeParamterNames));
}
Expand Down Expand Up @@ -630,7 +630,7 @@ private void AddMemberImplements(ISymbol symbol, MetadataItem item, IReadOnlyLis
where _filter.IncludeApi(type)
from member in type.GetMembers()
where _filter.IncludeApi(member)
where symbol.Equals(symbol.ContainingType.FindImplementationForInterfaceMember(member))
where symbol.Equals(symbol.ContainingType.FindImplementationForInterfaceMember(member), SymbolEqualityComparer.Default)
select AddSpecReference(member, typeGenericParameters)).ToList();
if (item.Implements.Count == 0)
{
Expand All @@ -645,7 +645,7 @@ private void AddMemberImplements(IMethodSymbol symbol, MetadataItem item, IReadO
where _filter.IncludeApi(type)
from member in type.GetMembers()
where _filter.IncludeApi(member)
where symbol.Equals(symbol.ContainingType.FindImplementationForInterfaceMember(member))
where symbol.Equals(symbol.ContainingType.FindImplementationForInterfaceMember(member), SymbolEqualityComparer.Default)
select AddSpecReference(
symbol.TypeParameters.Length == 0 ? member : ((IMethodSymbol)member).Construct(symbol.TypeParameters.ToArray<ITypeSymbol>()),
typeGenericParameters,
Expand Down Expand Up @@ -695,7 +695,7 @@ where IsInheritable(m)
var sig = MemberSigRegex.Replace(SpecIdHelper.GetSpecId(m, typeParamterNames), string.Empty);
if (!dict.ContainsKey(sig))
{
dict.Add(sig, type == symbol ? null : AddSpecReference(m, typeParamterNames));
dict.Add(sig, type.Equals(symbol, SymbolEqualityComparer.Default) ? null : AddSpecReference(m, typeParamterNames));
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/Microsoft.DocAsCode.Dotnet/Visitors/YamlModelGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ public string AddSpecReference(
{
originalSymbol = reducedFrom;
}
reference.IsDefinition = (originalSymbol == symbol) && (id == rawId) && (symbol.IsDefinition || VisitorHelper.GetId(symbol.OriginalDefinition) == rawId);
reference.IsDefinition = originalSymbol.Equals(symbol, SymbolEqualityComparer.Default) && (id == rawId) && (symbol.IsDefinition || VisitorHelper.GetId(symbol.OriginalDefinition) == rawId);

if (!reference.IsDefinition.Value && rawId != null)
{
Expand Down Expand Up @@ -196,7 +196,7 @@ private string GetReferenceParent(ISymbol symbol,

private static bool IsGlobalNamespace(ISymbol symbol)
{
return (symbol as INamespaceSymbol)?.IsGlobalNamespace == true;
return symbol is INamespaceSymbol { IsGlobalNamespace: true };
}
}
}
Loading