├── .editorconfig ├── .gitattributes ├── .github └── FUNDING.yml ├── .gitignore ├── .vscode └── settings.json ├── Build.cmd ├── CODE-OF-CONDUCT.md ├── GenerateTestSite.cmd ├── LICENSE ├── README.md ├── RunTestSite.cmd ├── SECURITY.md ├── SourceBrowser.sln ├── TestCode ├── ExternalFiles │ ├── File1.cs │ └── File2.cs ├── Project2 │ ├── -._~!$'()+,=@.cs │ ├── Class1.Partial.cs │ ├── Class1.cs │ └── Project2.csproj ├── TestSolution.sln ├── TestSolution │ ├── Folder │ │ └── Test.cs │ ├── Program.cs │ └── TestSolution.csproj ├── TestSolution_EdgeDriver_Tests │ ├── EdgeDriverTest.cs │ └── TestSolution_EdgeDriver_Tests.csproj ├── TestSolution_MSTest_Tests │ ├── TestSolution_MSTest_Tests.csproj │ └── UnitTest1.cs ├── TestSolution_NUnit_Tests │ ├── TestSolution_NUnit_Tests.csproj │ └── UnitTest1.cs ├── TestSolution_UnitTest_Tests │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── TestSolution_UnitTest_Tests.csproj │ ├── UnitTest1.cs │ └── packages.config ├── TestSolution_XUnit_Tests │ ├── TestSolution_XUnit_Tests.csproj │ └── UnitTest1.cs ├── TypeScript │ ├── TypeScript.csproj │ ├── analyzer.ts │ ├── analyzerEnv.ts │ ├── shims.ts │ └── utilities.ts ├── VBLibrary │ ├── Class1.vb │ └── VBLibrary.vbproj ├── WildcardIncludes │ ├── Program.cs │ ├── WildcardIncludes.csproj │ └── WildcardIncludes.sln └── WpfApplication1 │ ├── App.config │ ├── App.xaml │ ├── App.xaml.cs │ ├── CustomControl1.cs │ ├── Dictionary1.xaml │ ├── FlowDocument1.xaml │ ├── MainWindow.xaml │ ├── MainWindow.xaml.cs │ ├── Page1.xaml │ ├── Page1.xaml.cs │ ├── PageFunction1.xaml │ ├── PageFunction1.xaml.cs │ ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings │ ├── SplashScreen1.png │ ├── Themes │ └── Generic.xaml │ ├── UserControl1.xaml │ ├── UserControl1.xaml.cs │ ├── Window1.xaml │ ├── Window1.xaml.cs │ └── WpfApplication1.csproj ├── key.snk ├── lib └── Microsoft.CodeAnalysis.Workspaces.Desktop.dll └── src ├── Common ├── AssemblyNameExtractor.cs ├── AssertTraceListener.cs ├── Common.csproj ├── CustomAppDomainManager.cs ├── Disposable.cs ├── FileUtilities.cs ├── Huffman.cs ├── IsManagedAssembly.cs ├── Log.cs ├── Measure.cs ├── MultiDictionary.cs ├── Paths.cs ├── PriorityQueue.cs ├── ProcessLaunchService.cs ├── RangeUtilities.cs ├── SortedSearch.cs └── TextUtilities.cs ├── Directory.Build.props ├── GitGlyph ├── GitBlameVisitor.cs ├── GitGlyph.csproj └── GitSourceBrowserPlugin.cs ├── HtmlGenerator.Tests ├── CommandLineOptionsTests.cs ├── GitBlameVisitorTests.cs ├── HtmlGenerator.Tests.csproj ├── MSBuildExpressionParserTests.cs ├── MetadataAsSourceUnitTests.cs ├── PathsUnitTests.cs ├── PrepareRangesTests.cs ├── RedirectFileTests.cs ├── SerializationUnitTests.cs ├── SymbolIdUnitTests.cs ├── TestNormalize.cs └── TextUtilitiesTests.cs ├── HtmlGenerator ├── AppDomainInitializer.cs ├── CommandLineOptions.cs ├── Configuration.cs ├── HtmlGenerator.csproj ├── Pass1-Generation │ ├── Classifier.Range.cs │ ├── Classifier.cs │ ├── DocumentGenerator.Declarations.cs │ ├── DocumentGenerator.HighlightReferences.cs │ ├── DocumentGenerator.Links.cs │ ├── DocumentGenerator.References.cs │ ├── DocumentGenerator.cs │ ├── Federation.cs │ ├── GenerateFromBuildLog.cs │ ├── MSBuildSupport.cs │ ├── MetadataAsSource.cs │ ├── ProjectGenerator.Declarations.cs │ ├── ProjectGenerator.MetadataToSourceRedirect.cs │ ├── ProjectGenerator.ProjectExplorer.cs │ ├── ProjectGenerator.ProjectFile.cs │ ├── ProjectGenerator.ProjectInfo.cs │ ├── ProjectGenerator.References.Pass1.cs │ ├── ProjectGenerator.cs │ ├── SolutionGenerator.SolutionExplorer.cs │ ├── SolutionGenerator.cs │ ├── TypeScriptSupport.AnalysisError.cs │ ├── TypeScriptSupport.AnalyzedFile.cs │ ├── TypeScriptSupport.ClassifiedRange.cs │ ├── TypeScriptSupport.Hyperlink.cs │ ├── TypeScriptSupport.cs │ └── XmlSupport.cs ├── Pass2-Finalization │ ├── NamespaceExplorer.cs │ ├── ProjectFinalizer.Declarations.cs │ ├── ProjectFinalizer.References.cs │ ├── ProjectFinalizer.cs │ ├── SolutionFinalizer.SolutionExplorer.cs │ └── SolutionFinalizer.cs ├── Program.cs ├── ProjectSkeleton.cs ├── Properties │ └── launchSettings.json ├── SolutionInfo.cs ├── SourceBrowser.nuspec ├── TypeScriptSupport │ ├── analyzer.js │ └── lib.d.ts ├── Utilities │ ├── BinLogReader.cs │ ├── Constants.cs │ ├── DeclaredSymbolInfo.cs │ ├── FirstChanceExceptionHandler.cs │ ├── Folder`1.cs │ ├── Glyph.cs │ ├── HtmlElementInfo.cs │ ├── MSBuildExpressionParser.cs │ ├── Markup.cs │ ├── MetadataReading.cs │ ├── Paths.cs │ ├── PluginLogger.cs │ ├── Reference.cs │ ├── Serialization.cs │ ├── SymbolIdService.cs │ ├── SymbolKindText.cs │ ├── SymbolSorter.cs │ ├── WorkspaceHacks.cs │ └── XmlDocumentationProvider.cs ├── Web │ └── index │ │ └── AffiliateLinks.txt └── app.config ├── MEF ├── ContextKeys.cs ├── ILog.cs ├── ISourceBrowserPlugin.cs ├── ISourceBrowserPluginMetadata.cs ├── ISymbolVisitor.cs ├── ITextVisitor.cs ├── MEF.csproj ├── PluginAggregator.cs ├── SourceBrowserPluginWrapper.cs └── SymbolVisitorWrapper.cs ├── SourceIndexServer.Tests ├── IndexLoaderUnitTests.cs ├── IndexUnitTests.cs ├── QueryUnitTests.cs └── SourceIndexServer.Tests.csproj └── SourceIndexServer ├── Controllers ├── OpenSearchController.cs └── SymbolsController.cs ├── Models ├── AssemblyInfo.cs ├── Constants.cs ├── DeclaredSymbolInfo.cs ├── Index.cs ├── IndexEntry.cs ├── IndexLoader.cs ├── Markup.cs ├── Query.cs ├── QueryInterpretation.cs ├── ResultsHtmlGenerator.cs ├── Serialization.cs └── SymbolKindText.cs ├── Program.cs ├── Properties └── launchSettings.json ├── SourceIndexServer.csproj ├── Startup.cs └── wwwroot ├── content └── icons │ ├── 0.png │ ├── 1.png │ ├── 10.png │ ├── 100.png │ ├── 101.png │ ├── 102.png │ ├── 103.png │ ├── 104.png │ ├── 105.png │ ├── 106.png │ ├── 107.png │ ├── 108.png │ ├── 109.png │ ├── 11.png │ ├── 110.png │ ├── 111.png │ ├── 112.png │ ├── 113.png │ ├── 114.png │ ├── 115.png │ ├── 116.png │ ├── 117.png │ ├── 118.png │ ├── 119.png │ ├── 12.png │ ├── 120.png │ ├── 121.png │ ├── 122.png │ ├── 123.png │ ├── 124.png │ ├── 125.png │ ├── 126.png │ ├── 127.png │ ├── 128.png │ ├── 129.png │ ├── 13.png │ ├── 130.png │ ├── 131.png │ ├── 132.png │ ├── 133.png │ ├── 134.png │ ├── 135.png │ ├── 136.png │ ├── 137.png │ ├── 138.png │ ├── 139.png │ ├── 14.png │ ├── 140.png │ ├── 141.png │ ├── 142.png │ ├── 143.png │ ├── 144.png │ ├── 145.png │ ├── 146.png │ ├── 147.png │ ├── 148.png │ ├── 149.png │ ├── 15.png │ ├── 150.png │ ├── 151.png │ ├── 152.png │ ├── 153.png │ ├── 154.png │ ├── 155.png │ ├── 156.png │ ├── 157.png │ ├── 158.png │ ├── 159.png │ ├── 16.png │ ├── 160.png │ ├── 161.png │ ├── 162.png │ ├── 163.png │ ├── 164.png │ ├── 165.png │ ├── 166.png │ ├── 167.png │ ├── 168.png │ ├── 169.png │ ├── 17.png │ ├── 170.png │ ├── 171.png │ ├── 172.png │ ├── 173.png │ ├── 174.png │ ├── 175.png │ ├── 176.png │ ├── 177.png │ ├── 178.png │ ├── 179.png │ ├── 18.png │ ├── 180.png │ ├── 181.png │ ├── 182.png │ ├── 183.png │ ├── 184.png │ ├── 185.png │ ├── 186.png │ ├── 187.png │ ├── 188.png │ ├── 189.png │ ├── 19.png │ ├── 190.png │ ├── 191.png │ ├── 192.png │ ├── 193.png │ ├── 194.png │ ├── 195.png │ ├── 196.png │ ├── 197.png │ ├── 198.png │ ├── 199.png │ ├── 2.png │ ├── 20.png │ ├── 200.png │ ├── 201.png │ ├── 202.png │ ├── 203.png │ ├── 204.png │ ├── 205.png │ ├── 206.png │ ├── 207.png │ ├── 208.png │ ├── 209.png │ ├── 21.png │ ├── 210.png │ ├── 211.png │ ├── 212.png │ ├── 213.png │ ├── 214.png │ ├── 215.png │ ├── 216.png │ ├── 217.png │ ├── 218.png │ ├── 219.png │ ├── 22.png │ ├── 220.png │ ├── 221.png │ ├── 222.png │ ├── 223.png │ ├── 224.png │ ├── 225.png │ ├── 226.png │ ├── 227.png │ ├── 228.png │ ├── 229.png │ ├── 23.png │ ├── 230.png │ ├── 231.png │ ├── 232.png │ ├── 233.png │ ├── 234.png │ ├── 235.png │ ├── 24.png │ ├── 25.png │ ├── 26.png │ ├── 27.png │ ├── 28.png │ ├── 29.png │ ├── 3.png │ ├── 30.png │ ├── 31.png │ ├── 32.png │ ├── 33.png │ ├── 34.png │ ├── 35.png │ ├── 36.png │ ├── 37.png │ ├── 38.png │ ├── 39.png │ ├── 4.png │ ├── 40.png │ ├── 41.png │ ├── 42.png │ ├── 43.png │ ├── 44.png │ ├── 45.png │ ├── 46.png │ ├── 47.png │ ├── 48.png │ ├── 49.png │ ├── 5.png │ ├── 50.png │ ├── 51.png │ ├── 52.png │ ├── 53.png │ ├── 54.png │ ├── 55.png │ ├── 56.png │ ├── 57.png │ ├── 58.png │ ├── 59.png │ ├── 6.png │ ├── 60.png │ ├── 61.png │ ├── 62.png │ ├── 63.png │ ├── 64.png │ ├── 65.png │ ├── 66.png │ ├── 67.png │ ├── 68.png │ ├── 69.png │ ├── 7.png │ ├── 70.png │ ├── 71.png │ ├── 72.png │ ├── 73.png │ ├── 74.png │ ├── 75.png │ ├── 76.png │ ├── 77.png │ ├── 78.png │ ├── 79.png │ ├── 8.png │ ├── 80.png │ ├── 81.png │ ├── 82.png │ ├── 83.png │ ├── 84.png │ ├── 85.png │ ├── 86.png │ ├── 87.png │ ├── 88.png │ ├── 89.png │ ├── 9.png │ ├── 90.png │ ├── 91.png │ ├── 92.png │ ├── 93.png │ ├── 94.png │ ├── 95.png │ ├── 96.png │ ├── 97.png │ ├── 98.png │ ├── 99.png │ ├── CSharpProjectExplorer.png │ ├── DocumentOutline.png │ ├── NamespaceExplorer.png │ ├── VBProjectExplorer.png │ ├── csharp.png │ ├── dotnet.png │ ├── help.png │ ├── microsoftlogo.png │ ├── minus.png │ ├── plus.png │ ├── resx.png │ ├── searchmagnifyingglass.png │ ├── typescript.png │ ├── vb.png │ ├── xaml.png │ └── xml.png ├── documentoutline.html ├── favicon.ico ├── header.html ├── index.html ├── overview.html ├── scripts.js └── styles.css /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*.cs] 4 | csharp_prefer_braces = true:warning 5 | 6 | # CA1310: Specify StringComparison for correctness 7 | dotnet_diagnostic.CA1310.severity = warning 8 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Don't mess with my line endings. 3 | ############################################################################### 4 | * -text 5 | src/HtmlGenerator/TypeScriptSupport/analyzer.js linguist-vendored 6 | src/HtmlGenerator/TypeScriptSupport/lib.d.ts linguist-vendored 7 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [KirillOsenkov] 2 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "dotnet.defaultSolution": "SourceBrowser.sln" 3 | } -------------------------------------------------------------------------------- /Build.cmd: -------------------------------------------------------------------------------- 1 | msbuild /r /m /bl -------------------------------------------------------------------------------- /CODE-OF-CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | 3 | This project has adopted the code of conduct defined by the Contributor Covenant 4 | to clarify expected behavior in our community. 5 | 6 | For more information, see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct). 7 | -------------------------------------------------------------------------------- /GenerateTestSite.cmd: -------------------------------------------------------------------------------- 1 | src\HtmlGenerator\bin\Debug\net472\HtmlGenerator.exe TestCode\TestSolution.sln /out:src\HtmlGenerator\bin\Debug\net472\Web\Index -------------------------------------------------------------------------------- /RunTestSite.cmd: -------------------------------------------------------------------------------- 1 | pushd src\HtmlGenerator\bin\Debug\net472\Web\Index 2 | dotnet Microsoft.SourceBrowser.SourceIndexServer.dll 3 | popd -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Please update to 1.0.32 or newer 4 | 5 | Ensure that you have this commit: 6 | https://github.com/KirillOsenkov/SourceBrowser/commit/23dc70b28af2baf082904688027b7314403844f7 7 | 8 | If you maintain SourceBrowser-generated websites please update scripts.js so that it contains the above change (or redeploy using the latest version). 9 | 10 | ## Supported Versions 11 | 12 | The .NET Core and ASP.NET Core support policy, including supported versions can be found at the [.NET Core Support Policy Page](https://dotnet.microsoft.com/platform/support/policy/dotnet-core). 13 | 14 | ## Reporting a Vulnerability 15 | 16 | Security issues and bugs should be reported privately to the Microsoft Security Response Center (MSRC), either by emailing secure@microsoft.com or via the portal at https://msrc.microsoft.com. 17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your 18 | original message. Further information, including the MSRC PGP key, can be found in the [MSRC Report an Issue FAQ](https://www.microsoft.com/en-us/msrc/faqs-report-an-issue). 19 | 20 | Reports via MSRC may qualify for the .NET Core Bug Bounty. Details of the .NET Core Bug Bounty including terms and conditions are at [https://aka.ms/corebounty](https://aka.ms/corebounty). 21 | 22 | Please do not open issues for anything you think might have a security implication. 23 | -------------------------------------------------------------------------------- /TestCode/ExternalFiles/File1.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/TestCode/ExternalFiles/File1.cs -------------------------------------------------------------------------------- /TestCode/ExternalFiles/File2.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/TestCode/ExternalFiles/File2.cs -------------------------------------------------------------------------------- /TestCode/Project2/-._~!$'()+,=@.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Project2 8 | { 9 | class _ 10 | { 11 | _ _; 12 | 13 | _(){} 14 | 15 | void M( 16 | SomeClass a, 17 | SomeStruct b, 18 | SomeRecord c, 19 | SomeEnum d, 20 | SomeInterface e, 21 | SomeDelegate f, 22 | SomeTypeParameter g) 23 | { 24 | } 25 | 26 | class SomeClass { } 27 | struct SomeStruct { } 28 | record SomeRecord(int i); 29 | enum SomeEnum { } 30 | interface SomeInterface { } 31 | delegate void SomeDelegate(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /TestCode/Project2/Class1.Partial.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | partial class Partial 4 | { 5 | partial void Foo() 6 | { 7 | } 8 | } 9 | 10 | abstract class Word 11 | { 12 | } 13 | 14 | class DerivedWord : Word 15 | { 16 | void Foo() 17 | { 18 | Word w = new DerivedWord(); 19 | } 20 | } 21 | 22 | //========================================================== 23 | // https://github.com/KirillOsenkov/SourceBrowser/issues/113 24 | //========================================================== 25 | 26 | public interface IAnimal 27 | { 28 | void Eat(); 29 | } 30 | 31 | public abstract class AbstractAnimal 32 | { 33 | public void Eat() { } 34 | } 35 | 36 | public class Giraffe : AbstractAnimal, IAnimal 37 | { 38 | } -------------------------------------------------------------------------------- /TestCode/Project2/Project2.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | net472 4 | latest 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /TestCode/TestSolution/Folder/Test.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Folder 8 | { 9 | class Test 10 | { 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /TestCode/TestSolution/Program.cs: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /TestCode/TestSolution/TestSolution.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | netstandard2.0 4 | Exe 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /TestCode/TestSolution_EdgeDriver_Tests/EdgeDriverTest.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.VisualStudio.TestTools.UnitTesting; 2 | using OpenQA.Selenium; 3 | using OpenQA.Selenium.Edge; 4 | 5 | namespace TestSolution_EdgeDriver_Tests 6 | { 7 | [TestClass] 8 | public class EdgeDriverTest 9 | { 10 | // In order to run the below test(s), 11 | // please follow the instructions from http://go.microsoft.com/fwlink/?LinkId=619687 12 | // to install Microsoft WebDriver. 13 | 14 | private EdgeDriver _driver; 15 | 16 | [TestInitialize] 17 | public void EdgeDriverInitialize() 18 | { 19 | // Initialize edge driver 20 | var options = new EdgeOptions 21 | { 22 | PageLoadStrategy = PageLoadStrategy.Normal 23 | }; 24 | _driver = new EdgeDriver(options); 25 | } 26 | 27 | [TestMethod] 28 | public void VerifyPageTitle() 29 | { 30 | // Replace with your own test logic 31 | _driver.Url = "https://www.bing.com"; 32 | Assert.AreEqual("Bing", _driver.Title); 33 | } 34 | 35 | [TestCleanup] 36 | public void EdgeDriverCleanup() 37 | { 38 | _driver.Quit(); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /TestCode/TestSolution_EdgeDriver_Tests/TestSolution_EdgeDriver_Tests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | netcoreapp3.1 5 | false 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /TestCode/TestSolution_MSTest_Tests/TestSolution_MSTest_Tests.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp3.1 5 | 6 | false 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /TestCode/TestSolution_MSTest_Tests/UnitTest1.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.VisualStudio.TestTools.UnitTesting; 2 | 3 | namespace TestSolution_MSTest_Tests 4 | { 5 | [TestClass] 6 | public class UnitTest1 7 | { 8 | [TestMethod] 9 | public void TestMethod1() 10 | { 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /TestCode/TestSolution_NUnit_Tests/TestSolution_NUnit_Tests.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp3.1 5 | 6 | false 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /TestCode/TestSolution_NUnit_Tests/UnitTest1.cs: -------------------------------------------------------------------------------- 1 | using NUnit.Framework; 2 | 3 | namespace TestSolution_NUnit_Tests 4 | { 5 | public class Tests 6 | { 7 | [SetUp] 8 | public void Setup() 9 | { 10 | } 11 | 12 | [Test] 13 | public void Test1() 14 | { 15 | Assert.Pass(); 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /TestCode/TestSolution_UnitTest_Tests/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | [assembly: AssemblyTitle("TestSolution_UnitTest_Tests")] 6 | [assembly: AssemblyDescription("")] 7 | [assembly: AssemblyConfiguration("")] 8 | [assembly: AssemblyCompany("")] 9 | [assembly: AssemblyProduct("TestSolution_UnitTest_Tests")] 10 | [assembly: AssemblyCopyright("Copyright © 2020")] 11 | [assembly: AssemblyTrademark("")] 12 | [assembly: AssemblyCulture("")] 13 | 14 | [assembly: ComVisible(false)] 15 | 16 | [assembly: Guid("14ba174b-38f6-4342-bbdc-56ee3e8f3b79")] 17 | 18 | // [assembly: AssemblyVersion("1.0.*")] 19 | [assembly: AssemblyVersion("1.0.0.0")] 20 | [assembly: AssemblyFileVersion("1.0.0.0")] 21 | -------------------------------------------------------------------------------- /TestCode/TestSolution_UnitTest_Tests/TestSolution_UnitTest_Tests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | net472 4 | {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /TestCode/TestSolution_UnitTest_Tests/UnitTest1.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.VisualStudio.TestTools.UnitTesting; 3 | 4 | namespace TestSolution_UnitTest_Tests 5 | { 6 | [TestClass] 7 | public class UnitTest1 8 | { 9 | [TestMethod] 10 | public void TestMethod1() 11 | { 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /TestCode/TestSolution_UnitTest_Tests/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /TestCode/TestSolution_XUnit_Tests/TestSolution_XUnit_Tests.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp3.1 5 | 6 | false 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /TestCode/TestSolution_XUnit_Tests/UnitTest1.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Xunit; 3 | 4 | namespace TestSolution_Tests 5 | { 6 | public class UnitTest1 7 | { 8 | [Fact] 9 | public void Test1() 10 | { 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /TestCode/TypeScript/TypeScript.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | net472 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /TestCode/TypeScript/analyzerEnv.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | var ActiveXObject: { new(...args: any[]): any } 4 | 5 | declare module Intl { 6 | interface CollatorOptions { 7 | usage?: string; 8 | localeMatcher?: string; 9 | numeric?: boolean; 10 | caseFirst?: string; 11 | sensitivity?: string; 12 | ignorePunctuation?: boolean; 13 | } 14 | } 15 | 16 | interface String { 17 | /** 18 | * Determines whether two strings are equivalent in the current locale. 19 | * @param that String to compare to target string 20 | * @param locales An array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. This parameter must conform to BCP 47 standards; see the Intl.Collator object for details. 21 | * @param options An object that contains one or more properties that specify comparison options. see the Intl.Collator object for details. 22 | */ 23 | localeCompare(that: string, locales: string[], options?: Intl.CollatorOptions): number; 24 | 25 | /** 26 | * Determines whether two strings are equivalent in the current locale. 27 | * @param that String to compare to target string 28 | * @param locale Locale tag. If you omit this parameter, the default locale of the JavaScript runtime is used. This parameter must conform to BCP 47 standards; see the Intl.Collator object for details. 29 | * @param options An object that contains one or more properties that specify comparison options. see the Intl.Collator object for details. 30 | */ 31 | localeCompare(that: string, locale: string, options?: Intl.CollatorOptions): number; 32 | } 33 | 34 | module WScript { 35 | var fso: any = new ActiveXObject("Scripting.FileSystemObject"); 36 | var stdout = fso.GetStandardStream(1); 37 | export module Arguments { 38 | export function Item(n: number): any { 39 | throw new Error("NYI"); 40 | } 41 | export var length: number = 0; 42 | } 43 | 44 | export module StdOut { 45 | export function Write(s: string): void { 46 | stdout.Write(s); 47 | } 48 | } 49 | 50 | export var FileName: string = "tsc.js"; 51 | export var ScriptFullName: string = "tsc.js"; 52 | 53 | export function Quit(n: number): void { 54 | } 55 | } -------------------------------------------------------------------------------- /TestCode/VBLibrary/Class1.vb: -------------------------------------------------------------------------------- 1 | Module M 2 | Sub S() 3 | Dim a As Object() 4 | a = New Object() {} 5 | Console.WriteLine(a.Length) 6 | a = New Object(-1) {} 7 | Console.WriteLine(a.Length) 8 | Dim e(-1) As Object 9 | a = e 10 | Console.WriteLine(a.Length) 11 | 12 | Dim x = 13 | 14 | 15 | 16 | 17 | 18 | π 19 | a < 20 | 21 | <%= Nothing %> 22 | 23 | 24 | End Sub 25 | End Module 26 | 27 | Namespace Namespace1 28 | Public Class Class1 29 | Public ReadOnly Property Property1 As String 30 | End Class 31 | End Namespace -------------------------------------------------------------------------------- /TestCode/VBLibrary/VBLibrary.vbproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | net472 4 | 5 | 6 | On 7 | Binary 8 | Off 9 | On 10 | 11 | -------------------------------------------------------------------------------- /TestCode/WildcardIncludes/Program.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/TestCode/WildcardIncludes/Program.cs -------------------------------------------------------------------------------- /TestCode/WildcardIncludes/WildcardIncludes.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | net472 4 | bin\$(Configuration) 5 | 6 | 7 | 8 | Subfolder 9 | 10 | 11 | -------------------------------------------------------------------------------- /TestCode/WildcardIncludes/WildcardIncludes.sln: -------------------------------------------------------------------------------- 1 | Microsoft Visual Studio Solution File, Format Version 12.00 2 | # Visual Studio 14 3 | VisualStudioVersion = 14.0.24720.0 4 | MinimumVisualStudioVersion = 10.0.40219.1 5 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WildcardIncludes", "WildcardIncludes.csproj", "{DAFAB23C-9B6A-405C-90F9-2E23F29C3DE0}" 6 | EndProject 7 | Global 8 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 9 | Debug|Mixed Platforms = Debug|Mixed Platforms 10 | Release|Mixed Platforms = Release|Mixed Platforms 11 | EndGlobalSection 12 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 13 | {DAFAB23C-9B6A-405C-90F9-2E23F29C3DE0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU 14 | {DAFAB23C-9B6A-405C-90F9-2E23F29C3DE0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU 15 | {DAFAB23C-9B6A-405C-90F9-2E23F29C3DE0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU 16 | {DAFAB23C-9B6A-405C-90F9-2E23F29C3DE0}.Release|Mixed Platforms.Build.0 = Release|Any CPU 17 | EndGlobalSection 18 | EndGlobal 19 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/App.xaml: -------------------------------------------------------------------------------- 1 |  5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Configuration; 4 | using System.Data; 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | 9 | namespace WpfApplication1 10 | { 11 | /// 12 | /// Interaction logic for App.xaml 13 | /// 14 | public partial class App : Application 15 | { 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/CustomControl1.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | 16 | namespace WpfApplication1 17 | { 18 | /// 19 | /// Follow steps 1a or 1b and then 2 to use this custom control in a XAML file. 20 | /// 21 | /// Step 1a) Using this custom control in a XAML file that exists in the current project. 22 | /// Add this XmlNamespace attribute to the root element of the markup file where it is 23 | /// to be used: 24 | /// 25 | /// xmlns:MyNamespace="clr-namespace:WpfApplication1" 26 | /// 27 | /// 28 | /// Step 1b) Using this custom control in a XAML file that exists in a different project. 29 | /// Add this XmlNamespace attribute to the root element of the markup file where it is 30 | /// to be used: 31 | /// 32 | /// xmlns:MyNamespace="clr-namespace:WpfApplication1;assembly=WpfApplication1" 33 | /// 34 | /// You will also need to add a project reference from the project where the XAML file lives 35 | /// to this project and Rebuild to avoid compilation errors: 36 | /// 37 | /// Right click on the target project in the Solution Explorer and 38 | /// "Add Reference"->"Projects"->[Browse to and select this project] 39 | /// 40 | /// 41 | /// Step 2) 42 | /// Go ahead and use your control in the XAML file. 43 | /// 44 | /// 45 | /// 46 | /// 47 | public class CustomControl1 : Control 48 | { 49 | static CustomControl1() 50 | { 51 | DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1))); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/Dictionary1.xaml: -------------------------------------------------------------------------------- 1 |  3 | 4 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/FlowDocument1.xaml: -------------------------------------------------------------------------------- 1 |  3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/MainWindow.xaml: -------------------------------------------------------------------------------- 1 |  5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/MainWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | 16 | namespace WpfApplication1 17 | { 18 | /// 19 | /// Interaction logic for MainWindow.xaml 20 | /// 21 | public partial class MainWindow : Window 22 | { 23 | public MainWindow() 24 | { 25 | InitializeComponent(); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/Page1.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/Page1.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | 16 | namespace WpfApplication1 17 | { 18 | /// 19 | /// Interaction logic for Page1.xaml 20 | /// 21 | public partial class Page1 : Page 22 | { 23 | public Page1() 24 | { 25 | InitializeComponent(); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/PageFunction1.xaml: -------------------------------------------------------------------------------- 1 |  12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/PageFunction1.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | 16 | namespace WpfApplication1 17 | { 18 | /// 19 | /// Interaction logic for PageFunction1.xaml 20 | /// 21 | public partial class PageFunction1 : PageFunction 22 | { 23 | public PageFunction1() 24 | { 25 | InitializeComponent(); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Resources; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | using System.Windows; 6 | 7 | [assembly: ThemeInfo( 8 | ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 9 | //(used if a resource is not found in the page, 10 | // or application resource dictionaries) 11 | ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 12 | //(used if a resource is not found in the page, 13 | // app, or any theme specific resource dictionaries) 14 | )] 15 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.34014 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace WpfApplication1.Properties 12 | { 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources 26 | { 27 | 28 | private static global::System.Resources.ResourceManager resourceMan; 29 | 30 | private static global::System.Globalization.CultureInfo resourceCulture; 31 | 32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 33 | internal Resources() 34 | { 35 | } 36 | 37 | /// 38 | /// Returns the cached ResourceManager instance used by this class. 39 | /// 40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 41 | internal static global::System.Resources.ResourceManager ResourceManager 42 | { 43 | get 44 | { 45 | if ((resourceMan == null)) 46 | { 47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WpfApplication1.Properties.Resources", typeof(Resources).Assembly); 48 | resourceMan = temp; 49 | } 50 | return resourceMan; 51 | } 52 | } 53 | 54 | /// 55 | /// Overrides the current thread's CurrentUICulture property for all 56 | /// resource lookups using this strongly typed resource class. 57 | /// 58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 59 | internal static global::System.Globalization.CultureInfo Culture 60 | { 61 | get 62 | { 63 | return resourceCulture; 64 | } 65 | set 66 | { 67 | resourceCulture = value; 68 | } 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.34014 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace WpfApplication1.Properties 12 | { 13 | 14 | 15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 18 | { 19 | 20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 21 | 22 | public static Settings Default 23 | { 24 | get 25 | { 26 | return defaultInstance; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/SplashScreen1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/TestCode/WpfApplication1/SplashScreen1.png -------------------------------------------------------------------------------- /TestCode/WpfApplication1/Themes/Generic.xaml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 19 | 20 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/UserControl1.xaml: -------------------------------------------------------------------------------- 1 |  8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/UserControl1.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | 16 | namespace WpfApplication1 17 | { 18 | /// 19 | /// Interaction logic for UserControl1.xaml 20 | /// 21 | public partial class UserControl1 : UserControl 22 | { 23 | public UserControl1() 24 | { 25 | InitializeComponent(); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/Window1.xaml: -------------------------------------------------------------------------------- 1 |  5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/Window1.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Shapes; 14 | 15 | namespace WpfApplication1 16 | { 17 | /// 18 | /// Interaction logic for Window1.xaml 19 | /// 20 | public partial class Window1 : Window 21 | { 22 | public Window1() 23 | { 24 | InitializeComponent(); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /TestCode/WpfApplication1/WpfApplication1.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | net472 4 | WinExe 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | MSBuild:Compile 15 | 16 | 17 | App.xaml 18 | 19 | 20 | MSBuild:Compile 21 | 22 | 23 | MSBuild:Compile 24 | 25 | 26 | MSBuild:Compile 27 | 28 | 29 | MSBuild:Compile 30 | 31 | 32 | MSBuild:Compile 33 | 34 | 35 | MSBuild:Compile 36 | 37 | 38 | MSBuild:Compile 39 | 40 | 41 | MSBuild:Compile 42 | 43 | 44 | 45 | 46 | 47 | SettingsSingleFileGenerator 48 | Settings.Designer.cs 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /key.snk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/key.snk -------------------------------------------------------------------------------- /lib/Microsoft.CodeAnalysis.Workspaces.Desktop.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/lib/Microsoft.CodeAnalysis.Workspaces.Desktop.dll -------------------------------------------------------------------------------- /src/Common/AssertTraceListener.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Linq; 4 | 5 | namespace Microsoft.SourceBrowser.Common 6 | { 7 | #if NET472 8 | public class AssertTraceListener : TraceListener 9 | { 10 | public static void Register() 11 | { 12 | foreach (var existingListener in Debug.Listeners.OfType().ToArray()) 13 | { 14 | if (existingListener is DefaultTraceListener) 15 | { 16 | Debug.Listeners.Remove(existingListener); 17 | } 18 | } 19 | 20 | Debug.Listeners.Add(new AssertTraceListener()); 21 | } 22 | 23 | public override void Fail(string message, string detailMessage) 24 | { 25 | if (message.Contains("This is a soft assert - I don't think this can happen")) 26 | { 27 | return; 28 | } 29 | 30 | if (string.IsNullOrEmpty(message)) 31 | { 32 | message = "ASSERT FAILED"; 33 | } 34 | 35 | if (detailMessage == null) 36 | { 37 | detailMessage = string.Empty; 38 | } 39 | 40 | string stackTrace = new StackTrace(true).ToString(); 41 | 42 | if (stackTrace.Contains("OverriddenOrHiddenMembersHelpers.FindOverriddenOrHiddenMembersInType")) 43 | { 44 | // bug 661370 45 | return; 46 | } 47 | 48 | base.Fail(message, detailMessage); 49 | Log.Exception(message + "\r\n" + detailMessage + "\r\n" + stackTrace); 50 | } 51 | 52 | public override void Write(string message) 53 | { 54 | Log.Write(message); 55 | } 56 | 57 | public override void WriteLine(string message) 58 | { 59 | Log.Write(message); 60 | } 61 | } 62 | #endif 63 | } 64 | -------------------------------------------------------------------------------- /src/Common/Common.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | Microsoft.SourceBrowser.Common 4 | net472;netstandard2.0 5 | true 6 | ..\..\key.snk 7 | 11 | $(NoWarn);NU1701 12 | 13 | 14 | $(DefineConstants);NET472 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/Common/CustomAppDomainManager.cs: -------------------------------------------------------------------------------- 1 | #if NET472 2 | 3 | using System; 4 | using System.Linq; 5 | using System.Reflection; 6 | using System.Security.Policy; 7 | 8 | namespace Microsoft.SourceBrowser.Common 9 | { 10 | /// 11 | /// We want a callback when an appdomain is created, to install the MSBuildLocator 12 | /// into the XAML markup compilation appdomain and other appdomains, such as ones 13 | /// created by the ResolveCOMReference task. 14 | /// See https://github.com/KirillOsenkov/AppDomainManagerTest 15 | /// 16 | /// 17 | /// This class can't be in the entrypoint assembly because of a CLR bug. 18 | /// We need a way to callback the entrypoint assembly when a new appdomain 19 | /// is created. Let's just instantiate a well-known type from the 20 | /// entrypoint assembly. 21 | /// 22 | public class CustomAppDomainManager : AppDomainManager 23 | { 24 | /// 25 | /// This runs in the old appdomain when a new appdomain is created 26 | /// 27 | public override AppDomain CreateDomain(string friendlyName, Evidence securityInfo, AppDomainSetup appDomainInfo) 28 | { 29 | var result = base.CreateDomain(friendlyName, securityInfo, appDomainInfo); 30 | return result; 31 | } 32 | 33 | /// 34 | /// This runs in the new appdomain very early when it is being initialized 35 | /// 36 | public override void InitializeNewDomain(AppDomainSetup appDomainInfo) 37 | { 38 | base.InitializeNewDomain(appDomainInfo); 39 | NotifyEntrypointAssembly(); 40 | } 41 | 42 | private void NotifyEntrypointAssembly() 43 | { 44 | if (AppDomain.CurrentDomain.IsDefaultAppDomain()) 45 | { 46 | return; 47 | } 48 | 49 | var assembly = Assembly.Load("HtmlGenerator"); 50 | if (assembly == null) 51 | { 52 | return; 53 | } 54 | 55 | var type = assembly.GetType("Microsoft.SourceBrowser.HtmlGenerator.AppDomainInitializer"); 56 | if (type == null) 57 | { 58 | return; 59 | } 60 | 61 | Activator.CreateInstance(type); 62 | } 63 | } 64 | } 65 | 66 | #endif -------------------------------------------------------------------------------- /src/Common/Disposable.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | 4 | namespace Microsoft.SourceBrowser.Common 5 | { 6 | public class Disposable : IDisposable 7 | { 8 | private readonly string actionName; 9 | private readonly Stopwatch stopwatch = Stopwatch.StartNew(); 10 | 11 | private Disposable(string actionName) 12 | { 13 | this.actionName = actionName; 14 | } 15 | 16 | public static IDisposable Timing(string actionName) 17 | { 18 | Log.Write(actionName, ConsoleColor.DarkGray); 19 | return new Disposable(actionName); 20 | } 21 | 22 | public void Dispose() 23 | { 24 | var message = actionName + " complete. Took: " + stopwatch.Elapsed; 25 | Log.Write(message, ConsoleColor.Green); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/Common/FileUtilities.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | 4 | namespace Microsoft.SourceBrowser.Common 5 | { 6 | public static class FileUtilities 7 | { 8 | public static void CopyDirectory(string sourceDirectory, string destinationDirectory) 9 | { 10 | if (!Directory.Exists(sourceDirectory)) 11 | { 12 | throw new ArgumentException("Source directory doesn't exist:" + sourceDirectory); 13 | } 14 | 15 | sourceDirectory = sourceDirectory.TrimSlash(); 16 | 17 | if (string.IsNullOrEmpty(destinationDirectory)) 18 | { 19 | throw new ArgumentNullException(nameof(destinationDirectory)); 20 | } 21 | 22 | destinationDirectory = destinationDirectory.TrimSlash(); 23 | 24 | var files = Directory.GetFiles(sourceDirectory, "*.*", SearchOption.AllDirectories); 25 | foreach (var file in files) 26 | { 27 | var relative = file.Substring(sourceDirectory.Length + 1); 28 | var destination = Path.Combine(destinationDirectory, relative); 29 | CopyFile(file, destination); 30 | } 31 | } 32 | 33 | public static void CopyFile(string sourceFilePath, string destinationFilePath, bool overwrite = false) 34 | { 35 | if (!File.Exists(sourceFilePath)) 36 | { 37 | return; 38 | } 39 | 40 | if (!overwrite && File.Exists(destinationFilePath)) 41 | { 42 | return; 43 | } 44 | 45 | var directory = Path.GetDirectoryName(destinationFilePath); 46 | if (!Directory.Exists(directory)) 47 | { 48 | Directory.CreateDirectory(directory); 49 | } 50 | 51 | File.Copy(sourceFilePath, destinationFilePath, overwrite); 52 | File.SetAttributes(destinationFilePath, File.GetAttributes(destinationFilePath) & ~FileAttributes.ReadOnly); 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/Common/Measure.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | 4 | namespace Microsoft.SourceBrowser.Common 5 | { 6 | public sealed class Measure : IDisposable 7 | { 8 | private readonly Stopwatch stopwatch = Stopwatch.StartNew(); 9 | private readonly string title; 10 | 11 | public static IDisposable Time(string title) 12 | { 13 | return new Measure(title); 14 | } 15 | 16 | private Measure(string title) 17 | { 18 | this.title = title; 19 | } 20 | 21 | public void Dispose() 22 | { 23 | Debug.WriteLine(title + ": " + stopwatch.Elapsed); 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /src/Common/MultiDictionary.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Microsoft.SourceBrowser.Common 5 | { 6 | public class MultiDictionary : Dictionary> 7 | { 8 | private readonly IEqualityComparer valueComparer; 9 | 10 | public MultiDictionary() 11 | { 12 | } 13 | 14 | public MultiDictionary(IEqualityComparer keyComparer, IEqualityComparer valueComparer) 15 | : base(keyComparer) 16 | { 17 | this.valueComparer = valueComparer; 18 | } 19 | 20 | public void Add(K key, V value) 21 | { 22 | if (EqualityComparer.Default.Equals(default(K), key)) 23 | { 24 | throw new ArgumentNullException(nameof(key)); 25 | } 26 | 27 | if (!TryGetValue(key, out HashSet bucket)) 28 | { 29 | bucket = new HashSet(valueComparer); 30 | this.Add(key, bucket); 31 | } 32 | 33 | bucket.Add(value); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/Common/Paths.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | 5 | namespace Microsoft.SourceBrowser.Common 6 | { 7 | public static class Paths 8 | { 9 | public static string BaseAppFolder 10 | { 11 | get 12 | { 13 | return Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName); 14 | } 15 | } 16 | 17 | public static string QuoteIfNeeded(this string path) 18 | { 19 | if (path != null && path.Contains(" ")) 20 | { 21 | path = "\"" + path + "\""; 22 | } 23 | 24 | return path; 25 | } 26 | 27 | public static string TrimSlash(this string path) 28 | { 29 | if (string.IsNullOrEmpty(path)) 30 | { 31 | return path; 32 | } 33 | 34 | return path.TrimEnd('\\'); 35 | } 36 | 37 | public static string MustBeAbsolute(this string path) 38 | { 39 | if (!Path.IsPathRooted(path)) 40 | { 41 | throw new ArgumentException($"Path '{path}' is not absolute.", nameof(path)); 42 | } 43 | 44 | return path; 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/Common/RangeUtilities.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Microsoft.SourceBrowser.Common 5 | { 6 | public static class RangeUtilities 7 | { 8 | public static T[] FillGaps( 9 | string text, 10 | IList ranges, 11 | Func startGetter, 12 | Func lengthGetter, 13 | Func gapFactory) 14 | { 15 | var result = new List(ranges.Count); 16 | int current = 0; 17 | for (int i = 0; i < ranges.Count; i++) 18 | { 19 | var start = startGetter(ranges[i]); 20 | FillGapIfNeeded(current, start, text, result, gapFactory); 21 | 22 | result.Add(ranges[i]); 23 | current = start + lengthGetter(ranges[i]); 24 | } 25 | 26 | FillGapIfNeeded(current, text.Length, text, result, gapFactory); 27 | 28 | return result.ToArray(); 29 | } 30 | 31 | private static void FillGapIfNeeded( 32 | int current, 33 | int start, 34 | string sourceText, 35 | List result, 36 | Func gapFactory) 37 | { 38 | if (start > current) 39 | { 40 | var gapStart = current; 41 | var gapLength = start - gapStart; 42 | result.Add(gapFactory(gapStart, gapLength, sourceText)); 43 | } 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/Directory.Build.props: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 5 | latest 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/GitGlyph/GitGlyph.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Library 5 | net472 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/GitGlyph/GitSourceBrowserPlugin.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel.Composition; 4 | using LibGit2Sharp; 5 | using Microsoft.SourceBrowser.MEF; 6 | 7 | namespace GitGlyph 8 | { 9 | [Export(typeof(ISourceBrowserPlugin))] 10 | [ExportMetadata("Name", "Git")] 11 | public class GitSourceBrowserPlugin : ISourceBrowserPlugin, IDisposable 12 | { 13 | private ILog Logger { get; set; } 14 | private readonly List repositoriesToDispose; 15 | 16 | public GitSourceBrowserPlugin() 17 | { 18 | repositoriesToDispose = new List(); 19 | } 20 | 21 | public void Dispose() 22 | { 23 | foreach (var r in repositoriesToDispose) 24 | { 25 | r.Dispose(); 26 | } 27 | } 28 | 29 | public void Init(Dictionary Configuration, ILog logger) 30 | { 31 | Logger = logger; 32 | } 33 | 34 | public IEnumerable ManufactureSymbolVisitors(string projectPath) 35 | { 36 | yield break; 37 | } 38 | 39 | public IEnumerable ManufactureTextVisitors(string projectPath) 40 | { 41 | var path = Repository.Discover(projectPath); 42 | if (path == null) 43 | { 44 | Logger.Warning("Cannot find git repo"); 45 | } 46 | else 47 | { 48 | Repository r = new Repository(path); 49 | repositoriesToDispose.Add(r); 50 | yield return new GitBlameVisitor(r, Logger); 51 | } 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/HtmlGenerator.Tests/HtmlGenerator.Tests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net472 5 | $(NoWarn);VSTHRD002;VSTHRD103 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | PreserveNewest 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /src/HtmlGenerator.Tests/MSBuildExpressionParserTests.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using Microsoft.VisualStudio.TestTools.UnitTesting; 3 | 4 | namespace Microsoft.SourceBrowser.HtmlGenerator.Tests 5 | { 6 | [TestClass] 7 | public class MSBuildExpressionParserTests 8 | { 9 | [TestMethod] 10 | public void T1() 11 | { 12 | T(""); 13 | T("a", "a"); 14 | T("$(a)", "$(a)"); 15 | T("$(a", "$(a"); 16 | T("$a)", "$a)"); 17 | T("(a)", "(a)"); 18 | T("$(a())", "$(a())"); 19 | T("$(a()) ", "$(a())", " "); 20 | T(" $(a())", " ", "$(a())"); 21 | T(" $(a()) ", " ", "$(a())", " "); 22 | T("a$(b)c", "a", "$(b)", "c"); 23 | T("a$()c", "a", "$()", "c"); 24 | T("a$(b)c$(d)e", "a", "$(b)", "c", "$(d)", "e"); 25 | T("a$(b$(c))", "a", "$(b", "$(c)", ")"); 26 | T("$(a)$(b)c", "$(a)", "$(b)", "c"); 27 | T("@(a)", "@(a)"); 28 | T("@(a", "@(a"); 29 | T("@a)", "@a)"); 30 | T("(a)", "(a)"); 31 | T("@(a())", "@(a())"); 32 | T("@(a()) ", "@(a())", " "); 33 | T(" @(a())", " ", "@(a())"); 34 | T(" @(a()) ", " ", "@(a())", " "); 35 | T("a@(b)c", "a", "@(b)", "c"); 36 | T("a@()c", "a", "@()", "c"); 37 | T("a@(b)c@(d)e", "a", "@(b)", "c", "@(d)", "e"); 38 | T("a@(b)c$(d)e", "a", "@(b)", "c", "$(d)", "e"); 39 | T("a$(b)c@(d)e", "a", "$(b)", "c", "@(d)", "e"); 40 | T("a@(b@(c))", "a", "@(b", "@(c)", ")"); 41 | T("@(a)@(b)c", "@(a)", "@(b)", "c"); 42 | T("$(a)@(b)c", "$(a)", "@(b)", "c"); 43 | T("@(a)$(b)c", "@(a)", "$(b)", "c"); 44 | T("@(a->b)", "@(a-", ">b)"); 45 | T("@(a->b)", "@(a-", ">b)"); 46 | T("@(a,b)", "@(a,", "b)"); 47 | T("$(a.b)", "$(a.b)"); 48 | T(" @(a->b) ", " ", "@(a-", ">b) "); 49 | } 50 | 51 | private void T(string text, params string[] expectedParts) 52 | { 53 | var actual = MSBuildExpressionParser.SplitStringByPropertiesAndItems(text); 54 | var equal = expectedParts.SequenceEqual(actual); 55 | Assert.IsTrue(equal); 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/HtmlGenerator.Tests/MetadataAsSourceUnitTests.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using System.Reflection; 3 | using Microsoft.VisualStudio.TestTools.UnitTesting; 4 | 5 | namespace Microsoft.SourceBrowser.HtmlGenerator.Tests 6 | { 7 | [TestClass] 8 | public class MetadataAsSourceUnitTests 9 | { 10 | //[TestMethod] 11 | public void TestMAS1() 12 | { 13 | var filePath = Assembly.GetExecutingAssembly().Location; 14 | var solution = MetadataAsSource.LoadMetadataAsSourceSolution(filePath); 15 | var project = solution.Projects.First(); 16 | var documents = project.Documents.ToArray(); 17 | var texts = documents.Select(d => d.GetTextAsync().Result.ToString()).ToArray(); 18 | } 19 | 20 | [TestMethod] 21 | public void TestAssemblyAttributes1() 22 | { 23 | var filePath = Assembly.GetExecutingAssembly().Location; 24 | var attributes = MetadataReading.GetAssemblyAttributes(filePath); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/HtmlGenerator.Tests/PrepareRangesTests.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.IO; 3 | using System.Linq; 4 | using System.Reflection; 5 | using Microsoft.VisualStudio.TestTools.UnitTesting; 6 | 7 | namespace Microsoft.SourceBrowser.HtmlGenerator.Tests 8 | { 9 | [TestClass] 10 | public class PrepareRangesTests 11 | { 12 | [TestMethod] 13 | public void TestRanges() 14 | { 15 | T( 16 | "abcdefghijkl", 17 | new Dictionary { { 2, 3 } }, 18 | new Dictionary { { 6, 2 } }, 19 | new Dictionary { { 0, 2 }, { 2, 3 }, { 5, 1 }, { 6, 2 }, { 8, 4 } }); 20 | } 21 | 22 | [TestMethod] 23 | public void TestRemoveOverlappingRanges() 24 | { 25 | const string text = "abcd"; 26 | var actualRanges = TypeScriptSupport.RemoveOverlappingRanges( 27 | text, 28 | new[] { 29 | new ClassifiedRange(text, 0, 2), 30 | new ClassifiedRange(text, 2, 2) 31 | }); 32 | } 33 | 34 | private void T( 35 | string text, 36 | Dictionary syntactic, 37 | Dictionary semantic, 38 | Dictionary expectedOutput) 39 | { 40 | Paths.SolutionDestinationFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 41 | 42 | var expectedArray = expectedOutput.ToArray(); 43 | var result = TypeScriptSupport.PrepareRanges( 44 | syntactic.Select(p => new ClassifiedRange(text, p.Key, p.Value)).ToArray(), 45 | semantic.Select(p => new ClassifiedRange(text, p.Key, p.Value)).ToArray(), 46 | text); 47 | Assert.AreEqual(expectedOutput.Count, result.Length, "Lengths aren't same"); 48 | for (int i = 0; i < expectedOutput.Count; i++) 49 | { 50 | Assert.AreEqual(expectedArray[i].Key, result[i].start); 51 | Assert.AreEqual(expectedArray[i].Value, result[i].length); 52 | } 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/HtmlGenerator.Tests/RedirectFileTests.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.IO; 3 | using System.Linq; 4 | using Microsoft.VisualStudio.TestTools.UnitTesting; 5 | 6 | namespace Microsoft.SourceBrowser.HtmlGenerator.Tests 7 | { 8 | [TestClass] 9 | public class RedirectFileTests 10 | { 11 | //[TestMethod] 12 | public void TestRedirectFileGeneration() 13 | { 14 | var originalFile = @"E:\Index\mscorlib\A.html"; 15 | var lines = File.ReadAllLines(originalFile); 16 | 17 | var list = new List>(); 18 | var map = new Dictionary(); 19 | 20 | foreach (var line in lines) 21 | { 22 | if (line.Length > 25 && line[0] == 'm') 23 | { 24 | if (line[22] == '"') 25 | { 26 | var id = line.Substring(3, 16); 27 | var file = line.Substring(23, line.Length - 25); 28 | list.Add(new KeyValuePair(id, file)); 29 | map[id] = file; 30 | } 31 | else if (line[22] == 'm') 32 | { 33 | var id = line.Substring(3, 16); 34 | var other = line.Substring(25, 16); 35 | list.Add(new KeyValuePair(id, map[other])); 36 | } 37 | } 38 | } 39 | 40 | Microsoft.SourceBrowser.HtmlGenerator.ProjectGenerator.GenerateRedirectFile( 41 | @"E:\Solution", 42 | @"E:\Solution\Project", 43 | list.ToDictionary(kvp => kvp.Key, kvp => (IEnumerable)new List { kvp.Value })); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/HtmlGenerator.Tests/SerializationUnitTests.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.VisualStudio.TestTools.UnitTesting; 2 | 3 | namespace Microsoft.SourceBrowser.HtmlGenerator.Tests 4 | { 5 | [TestClass] 6 | public class SerializationUnitTests 7 | { 8 | [TestMethod] 9 | public void TestULongToHexStringRoundtrip() 10 | { 11 | for (int i = 0; i < 1000; i++) 12 | { 13 | var originalStringId = Paths.GetMD5Hash(i.ToString(), 16); 14 | var id = Paths.GetMD5HashULong(i.ToString(), 16); 15 | var stringId = Serialization.ULongToHexString(id); 16 | Assert.AreEqual(originalStringId, stringId); 17 | Assert.AreEqual(16, stringId.Length); 18 | var actualId = Serialization.HexStringToULong(stringId); 19 | Assert.AreEqual(id, actualId); 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/HtmlGenerator.Tests/SymbolIdUnitTests.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.VisualStudio.TestTools.UnitTesting; 2 | 3 | namespace Microsoft.SourceBrowser.HtmlGenerator.Tests 4 | { 5 | [TestClass] 6 | public class SymbolIdUnitTests 7 | { 8 | [TestMethod] 9 | public void TestHash() 10 | { 11 | var symbolId = "T:Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamedTypeSymbol"; 12 | var bytes = Paths.GetMD5Hash(symbolId, 16); 13 | Assert.AreEqual("a7aec3faae7fe65b", bytes); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/HtmlGenerator.Tests/TestNormalize.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Microsoft.VisualStudio.TestTools.UnitTesting; 5 | 6 | namespace Microsoft.SourceBrowser.HtmlGenerator.Tests 7 | { 8 | [TestClass] 9 | public class NormalizeTests 10 | { 11 | [TestMethod] 12 | public void NormalizeTest1() 13 | { 14 | new TestNormalize 15 | { 16 | AssembliesAndProjects = 17 | { 18 | { "a", "e" }, 19 | { "b", "f" }, 20 | { "c", "d" } 21 | }, 22 | Assemblies = 23 | { 24 | { "a", 1 }, 25 | { "b", 2 }, 26 | { "c", 0 } 27 | }, 28 | Projects = 29 | { 30 | "d", 31 | "e", 32 | "f" 33 | } 34 | }.Verify(); 35 | } 36 | 37 | [TestMethod] 38 | public void NormalizeTest2() 39 | { 40 | new TestNormalize 41 | { 42 | AssembliesAndProjects = 43 | { 44 | { "a", null }, 45 | { "b", "f" }, 46 | { "c", "d" } 47 | }, 48 | Assemblies = 49 | { 50 | { "a", -1 }, 51 | { "b", 1 }, 52 | { "c", 0 } 53 | }, 54 | Projects = 55 | { 56 | "d", 57 | "f" 58 | } 59 | }.Verify(); 60 | } 61 | } 62 | 63 | public class TestNormalize 64 | { 65 | public TupleList AssembliesAndProjects = new TupleList(); 66 | public TupleList Assemblies = new TupleList(); 67 | public List Projects = new List(); 68 | 69 | public void Verify() 70 | { 71 | IEnumerable> actualAssemblies; 72 | IEnumerable actualProjects; 73 | Serialization.Normalize( 74 | AssembliesAndProjects, 75 | out actualAssemblies, 76 | out actualProjects); 77 | Assert.IsTrue(actualAssemblies.SequenceEqual(Assemblies)); 78 | Assert.IsTrue(actualProjects.SequenceEqual(Projects)); 79 | } 80 | } 81 | 82 | public class TupleList : List> 83 | { 84 | public void Add(T1 t1, T2 t2) 85 | { 86 | Add(Tuple.Create(t1, t2)); 87 | } 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /src/HtmlGenerator/AppDomainInitializer.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.SourceBrowser.HtmlGenerator 2 | { 3 | public class AppDomainInitializer 4 | { 5 | /// 6 | /// This is called everytime a new appdomain is created in the current process. 7 | /// 8 | public AppDomainInitializer() 9 | { 10 | Microsoft.Build.Locator.MSBuildLocator.RegisterDefaults(); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/HtmlGenerator/Configuration.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.SourceBrowser.HtmlGenerator 2 | { 3 | public class Configuration 4 | { 5 | // useful knobs to suppress stuff 6 | public static readonly bool GenerateMetadataAsSourceBodies = true; 7 | public static readonly bool CalculateRoslynSemantics = true; 8 | public static readonly bool WriteDocumentsToDisk = true; 9 | public static readonly bool WriteProjectAuxiliaryFilesToDisk = true; 10 | public static readonly bool CreateFoldersOnDisk = true; 11 | public static readonly bool FlattenSolutionExplorer = false; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/HtmlGenerator/Pass1-Generation/Classifier.Range.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.CodeAnalysis.Classification; 2 | using Microsoft.CodeAnalysis.Text; 3 | 4 | namespace Microsoft.SourceBrowser.HtmlGenerator 5 | { 6 | public partial class Classification 7 | { 8 | public class Range 9 | { 10 | public ClassifiedSpan ClassifiedSpan; 11 | public string Text; 12 | 13 | public Range() 14 | { 15 | } 16 | 17 | public Range(string classification, TextSpan textSpan, string text) 18 | { 19 | ClassifiedSpan = new ClassifiedSpan(classification, textSpan); 20 | Text = text; 21 | } 22 | 23 | public string ClassificationType => ClassifiedSpan.ClassificationType; 24 | 25 | public TextSpan TextSpan => ClassifiedSpan.TextSpan; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/HtmlGenerator/Pass1-Generation/DocumentGenerator.Declarations.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using Microsoft.CodeAnalysis; 3 | 4 | namespace Microsoft.SourceBrowser.HtmlGenerator 5 | { 6 | public partial class DocumentGenerator 7 | { 8 | private HtmlElementInfo ProcessDeclaredSymbol(ISymbol declaredSymbol, bool isLargeFile) 9 | { 10 | if (declaredSymbol.Kind == SymbolKind.Local || 11 | declaredSymbol.Kind == SymbolKind.Parameter || 12 | declaredSymbol.Kind == SymbolKind.TypeParameter) 13 | { 14 | if (isLargeFile) 15 | { 16 | return null; 17 | } 18 | 19 | return HighlightDefinition(declaredSymbol); 20 | } 21 | 22 | var result = GenerateHyperlinkToReferences(declaredSymbol, isLargeFile); 23 | return result; 24 | } 25 | 26 | public HtmlElementInfo GenerateHyperlinkToReferences(ISymbol symbol, bool isLargeFile = false) 27 | { 28 | string symbolId = SymbolIdService.GetId(symbol); 29 | 30 | string referencesFilePath = Path.Combine(ProjectDestinationFolder, Constants.ReferencesFileName, symbolId + ".html"); 31 | string href = Paths.MakeRelativeToFile(referencesFilePath, documentDestinationFilePath); 32 | href = href.Replace('\\', '/'); 33 | 34 | var result = new HtmlElementInfo 35 | { 36 | Name = "a", 37 | Attributes = 38 | { 39 | ["id"] = symbolId, 40 | ["href"] = href, 41 | ["target"] = "n", 42 | }, 43 | DeclaredSymbol = symbol, 44 | DeclaredSymbolId = symbolId 45 | }; 46 | 47 | if (!isLargeFile) 48 | { 49 | var dataGlyph = string.Format("{0},{1}", 50 | SymbolIdService.GetGlyphNumber(symbol), 51 | GetSymbolDepth(symbol)); 52 | result.Attributes.Add("data-glyph", dataGlyph); 53 | } 54 | 55 | return result; 56 | } 57 | 58 | private int GetSymbolDepth(ISymbol symbol) 59 | { 60 | ISymbol current = symbol.ContainingSymbol; 61 | int depth = 0; 62 | while (current != null) 63 | { 64 | if (current is INamespaceSymbol namespaceSymbol) 65 | { 66 | // if we've reached the global namespace, we're already at the top; bail 67 | if (namespaceSymbol.IsGlobalNamespace) 68 | { 69 | break; 70 | } 71 | } 72 | else 73 | { 74 | // we don't want namespaces to add to our "depth" because they won't be displayed in the tree 75 | depth++; 76 | } 77 | 78 | current = current.ContainingSymbol; 79 | } 80 | 81 | return depth; 82 | } 83 | } 84 | } -------------------------------------------------------------------------------- /src/HtmlGenerator/Pass1-Generation/DocumentGenerator.HighlightReferences.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Microsoft.CodeAnalysis; 3 | 4 | namespace Microsoft.SourceBrowser.HtmlGenerator 5 | { 6 | public partial class DocumentGenerator 7 | { 8 | private readonly Dictionary localIds = new Dictionary(SymbolEqualityComparer.Default); 9 | 10 | private HtmlElementInfo HighlightDefinition(ISymbol declaredSymbol) 11 | { 12 | int localId = GetLocalId(declaredSymbol); 13 | return new HtmlElementInfo 14 | { 15 | Name = "span", 16 | Attributes = 17 | { 18 | { "id", "r" + localId + " rd" + GetClass(declaredSymbol.Kind) }, 19 | { "class", "r" + localId + " r" + GetClass(declaredSymbol.Kind) } 20 | } 21 | }; 22 | } 23 | 24 | private HtmlElementInfo HighlightReference(ISymbol symbol) 25 | { 26 | int localId = GetLocalId(symbol); 27 | return new HtmlElementInfo 28 | { 29 | Name = "span", 30 | Attributes = 31 | { 32 | { "class", "r" + localId + " r" + GetClass(symbol.Kind) } 33 | } 34 | }; 35 | } 36 | 37 | private string GetClass(SymbolKind kind) 38 | { 39 | if (kind == SymbolKind.TypeParameter) 40 | { 41 | return " t"; 42 | } 43 | 44 | return ""; 45 | } 46 | 47 | private int GetLocalId(ISymbol symbol) 48 | { 49 | if (!localIds.TryGetValue(symbol, out int localId)) 50 | { 51 | localId = localIds.Count; 52 | localIds.Add(symbol, localId); 53 | } 54 | 55 | return localId; 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/HtmlGenerator/Pass1-Generation/ProjectGenerator.ProjectInfo.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using System.Linq; 3 | using System.Text; 4 | using Microsoft.CodeAnalysis; 5 | using Microsoft.SourceBrowser.Common; 6 | 7 | namespace Microsoft.SourceBrowser.HtmlGenerator 8 | { 9 | public partial class ProjectGenerator 10 | { 11 | public long DocumentCount = 0; 12 | public long LinesOfCode = 0; 13 | public long BytesOfCode = 0; 14 | 15 | private void GenerateProjectInfo() 16 | { 17 | Log.Write("Project info..."); 18 | var projectInfoFile = Path.Combine(ProjectDestinationFolder, Constants.ProjectInfoFileName) + ".txt"; 19 | var namedTypes = this.DeclaredSymbols.Keys.OfType(); 20 | var sb = new StringBuilder(); 21 | sb.Append("ProjectSourcePath=").AppendLine(ProjectSourcePath) 22 | .Append("DocumentCount=").Append(DocumentCount).AppendLine() 23 | .Append("LinesOfCode=").Append(LinesOfCode).AppendLine() 24 | .Append("BytesOfCode=").Append(BytesOfCode).AppendLine() 25 | .Append("DeclaredSymbols=").Append(DeclaredSymbols.Count).AppendLine() 26 | .Append("DeclaredTypes=").Append(namedTypes.Count()).AppendLine() 27 | .Append("PublicTypes=").Append(namedTypes.Count(t => t.DeclaredAccessibility == Accessibility.Public)).AppendLine(); 28 | File.WriteAllText(projectInfoFile, sb.ToString()); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/HtmlGenerator/Pass1-Generation/TypeScriptSupport.AnalysisError.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.SourceBrowser.HtmlGenerator 2 | { 3 | public class AnalysisError 4 | { 5 | public string message { get; set; } 6 | public string stack { get; set; } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/HtmlGenerator/Pass1-Generation/TypeScriptSupport.AnalyzedFile.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.SourceBrowser.HtmlGenerator 2 | { 3 | public class AnalyzedFile 4 | { 5 | public string fileName { get; set; } 6 | public ClassifiedRange[] syntacticClassifications { get; set; } 7 | public ClassifiedRange[] semanticClassifications { get; set; } 8 | public string fileSymbolId { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/HtmlGenerator/Pass1-Generation/TypeScriptSupport.ClassifiedRange.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.SourceBrowser.HtmlGenerator 2 | { 3 | public class ClassifiedRange 4 | { 5 | // deserialization 6 | public ClassifiedRange() 7 | { 8 | } 9 | 10 | public ClassifiedRange(string text, int start, int length, ClassifiedRange enclosingRange = null) 11 | { 12 | this.text = text.Substring(start, length); 13 | 14 | this.start = start; 15 | this.length = length; 16 | 17 | if (enclosingRange != null) 18 | { 19 | classification = enclosingRange.classification; 20 | hyperlinks = enclosingRange.hyperlinks; 21 | definitionSymbolId = enclosingRange.definitionSymbolId; 22 | definitionKind = enclosingRange.definitionKind; 23 | searchString = enclosingRange.searchString; 24 | fullName = enclosingRange.fullName; 25 | } 26 | } 27 | 28 | public string classification { get; set; } 29 | public int start { get; set; } 30 | public int length { get; set; } 31 | public int end { get { return start + length; } } 32 | public Hyperlink[] hyperlinks { get; set; } 33 | public string definitionSymbolId { get; set; } 34 | public string definitionKind { get; set; } 35 | public string searchString { get; set; } 36 | public string fullName { get; set; } 37 | 38 | public bool IsSemantic { get; set; } 39 | 40 | public string text { get; set; } 41 | public int lineNumber { get; set; } 42 | public int column { get; set; } 43 | public string lineText { get; set; } 44 | 45 | public bool IsSymbolLocalOnly() 46 | { 47 | return 48 | definitionKind == "variable" || 49 | definitionKind == "parameter"; 50 | } 51 | 52 | public override string ToString() 53 | { 54 | return string.Format("{0} ({1};{2}) {3}", text, start, length, classification); 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/HtmlGenerator/Pass1-Generation/TypeScriptSupport.Hyperlink.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.SourceBrowser.HtmlGenerator 2 | { 3 | public class Hyperlink 4 | { 5 | public string sourceFile { get; set; } 6 | public int start { get; set; } 7 | public string symbolId { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/HtmlGenerator/ProjectSkeleton.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.SourceBrowser.HtmlGenerator 2 | { 3 | public class ProjectSkeleton 4 | { 5 | public string AssemblyName { get; } 6 | public string Name { get; } 7 | 8 | public ProjectSkeleton(string assemblyName, string name) 9 | { 10 | AssemblyName = assemblyName; 11 | Name = name; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/HtmlGenerator/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "HtmlGenerator": { 4 | "commandName": "Project", 5 | "commandLineArgs": "$(SolutionDir)TestCode\\TestSolution.sln /out:$(SolutionDir)src\\SourceIndexServer\\index" 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /src/HtmlGenerator/SolutionInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Microsoft.SourceBrowser.HtmlGenerator 4 | { 5 | public class SolutionInfo 6 | { 7 | public string SlnPath { get; set; } 8 | public string UrlRoot { get; set; } 9 | public Dictionary MSBuildProperties { get; set; } 10 | public bool NuGetRestore { get; internal set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/HtmlGenerator/SourceBrowser.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SourceBrowser 5 | Generates a website to browse a managed code solution online 6 | 7 | Generates a static HTML website from a managed Visual Studio solution that allows you to search, browse and navigate the C#, VB, MSBuild and TypeScript code online. 8 | 9 | 10 | 11 | 12 | en-US 13 | false 14 | $currentVersion$ 15 | KirillOsenkov 16 | Apache-2.0 17 | https://github.com/KirillOsenkov/SourceBrowser 18 | 19 | Roslyn Source Browser 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/HtmlGenerator/Utilities/Folder`1.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Microsoft.SourceBrowser.HtmlGenerator 5 | { 6 | public class Folder 7 | { 8 | public string Name { get; set; } 9 | public SortedList> Folders { get; set; } 10 | public List Items { get; set; } 11 | 12 | public void Add(T item) 13 | { 14 | if (Items == null) 15 | { 16 | Items = new List(); 17 | } 18 | 19 | Items.Add(item); 20 | } 21 | 22 | public void Sort(Comparison comparison) 23 | { 24 | if (Items != null) 25 | { 26 | Items.Sort((l, r) => comparison(l, r)); 27 | } 28 | 29 | if (Folders != null) 30 | { 31 | foreach (var subfolder in Folders.Values) 32 | { 33 | subfolder.Sort(comparison); 34 | } 35 | } 36 | } 37 | 38 | public Folder GetOrCreateFolder(string folderName) 39 | { 40 | if (Folders == null) 41 | { 42 | Folders = new SortedList>(StringComparer.OrdinalIgnoreCase); 43 | } 44 | 45 | if (!Folders.TryGetValue(folderName, out Folder result)) 46 | { 47 | result = new Folder { Name = folderName }; 48 | Folders.Add(folderName, result); 49 | } 50 | 51 | return result; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/HtmlGenerator/Utilities/Glyph.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.CodeAnalysis 2 | { 3 | public enum Glyph 4 | { 5 | None, 6 | 7 | Assembly, 8 | 9 | BasicFile, 10 | BasicProject, 11 | 12 | ClassPublic, 13 | ClassProtected, 14 | ClassPrivate, 15 | ClassInternal, 16 | 17 | CSharpFile, 18 | CSharpProject, 19 | 20 | ConstantPublic, 21 | ConstantProtected, 22 | ConstantPrivate, 23 | ConstantInternal, 24 | 25 | DelegatePublic, 26 | DelegateProtected, 27 | DelegatePrivate, 28 | DelegateInternal, 29 | 30 | EnumPublic, 31 | EnumProtected, 32 | EnumPrivate, 33 | EnumInternal, 34 | 35 | EnumMemberPublic, 36 | EnumMemberProtected, 37 | EnumMemberPrivate, 38 | EnumMemberInternal, 39 | 40 | Error, 41 | StatusInformation, 42 | 43 | EventPublic, 44 | EventProtected, 45 | EventPrivate, 46 | EventInternal, 47 | 48 | ExtensionMethodPublic, 49 | ExtensionMethodProtected, 50 | ExtensionMethodPrivate, 51 | ExtensionMethodInternal, 52 | 53 | FieldPublic, 54 | FieldProtected, 55 | FieldPrivate, 56 | FieldInternal, 57 | 58 | InterfacePublic, 59 | InterfaceProtected, 60 | InterfacePrivate, 61 | InterfaceInternal, 62 | 63 | Intrinsic, 64 | 65 | Keyword, 66 | 67 | Label, 68 | 69 | Local, 70 | 71 | Namespace, 72 | 73 | MethodPublic, 74 | MethodProtected, 75 | MethodPrivate, 76 | MethodInternal, 77 | 78 | ModulePublic, 79 | ModuleProtected, 80 | ModulePrivate, 81 | ModuleInternal, 82 | 83 | OpenFolder, 84 | 85 | Operator, 86 | 87 | Parameter, 88 | 89 | PropertyPublic, 90 | PropertyProtected, 91 | PropertyPrivate, 92 | PropertyInternal, 93 | 94 | RangeVariable, 95 | 96 | Reference, 97 | 98 | StructurePublic, 99 | StructureProtected, 100 | StructurePrivate, 101 | StructureInternal, 102 | 103 | TypeParameter, 104 | 105 | Snippet, 106 | 107 | CompletionWarning, 108 | 109 | AddReference, 110 | NuGet 111 | } 112 | } -------------------------------------------------------------------------------- /src/HtmlGenerator/Utilities/HtmlElementInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Microsoft.CodeAnalysis; 3 | 4 | namespace Microsoft.SourceBrowser.HtmlGenerator 5 | { 6 | public class HtmlElementInfo 7 | { 8 | public string Name { get; set; } 9 | public Dictionary Attributes { get; } 10 | 11 | public ISymbol DeclaredSymbol { get; set; } 12 | public string DeclaredSymbolId { get; set; } 13 | 14 | public HtmlElementInfo() 15 | { 16 | Attributes = new Dictionary(); 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /src/HtmlGenerator/Utilities/PluginLogger.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.SourceBrowser.Common; 3 | 4 | namespace Microsoft.SourceBrowser.HtmlGenerator.Utilities 5 | { 6 | public class PluginLogger : MEF.ILog 7 | { 8 | public void Critical(string message, Exception ex = null) 9 | { 10 | if (ex != null) 11 | { 12 | Log.Exception(ex, message, true); 13 | } 14 | 15 | Log.Exception(message, true); 16 | } 17 | 18 | public void Debug(string message, Exception ex = null) 19 | { 20 | Log.Write(message); 21 | if (ex != null) 22 | { 23 | Log.Write(ex.Message); //Don't print too much -- this is an unimportant log 24 | } 25 | } 26 | 27 | public void Error(string message, Exception ex = null) 28 | { 29 | if (ex != null) 30 | { 31 | Log.Exception(ex, message, true); 32 | } 33 | 34 | Log.Exception(message, true); 35 | } 36 | 37 | public void Fatal(string message, Exception ex = null) 38 | { 39 | if (ex != null) 40 | { 41 | Log.Exception(ex, message, true); 42 | } 43 | 44 | Log.Exception(message, true); 45 | } 46 | 47 | public void Info(string message, Exception ex = null) 48 | { 49 | Log.Write(message); 50 | if (ex != null) 51 | { 52 | Log.Write(ex.Message); //Don't print too much -- this is an unimportant log 53 | } 54 | } 55 | 56 | public void Status(string message, Exception ex = null) 57 | { 58 | Log.Message(message); 59 | if (ex != null) 60 | { 61 | Log.Message(ex.Message); //Don't print too much -- this is an unimportant log 62 | } 63 | } 64 | 65 | public void Verbose(string message, Exception ex = null) 66 | { 67 | Log.Write(message); 68 | if (ex != null) 69 | { 70 | Log.Write(ex.Message); //Don't print too much -- this is an unimportant log 71 | } 72 | } 73 | 74 | public void Warning(string message, Exception ex = null) 75 | { 76 | if (ex != null) 77 | { 78 | Log.Exception(ex, message, false); 79 | } 80 | 81 | Log.Exception(message, false); 82 | } 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /src/HtmlGenerator/Utilities/Reference.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | 3 | namespace Microsoft.SourceBrowser.HtmlGenerator 4 | { 5 | public enum ReferenceKind 6 | { 7 | DerivedType, 8 | InterfaceInheritance, 9 | InterfaceImplementation, 10 | Override, 11 | InterfaceMemberImplementation, 12 | Instantiation, 13 | Write, 14 | Read, 15 | Reference, 16 | GuidUsage, 17 | EmptyArrayAllocation, 18 | MSBuildPropertyAssignment, 19 | MSBuildPropertyUsage, 20 | MSBuildItemAssignment, 21 | MSBuildItemUsage, 22 | MSBuildTargetDeclaration, 23 | MSBuildTargetUsage, 24 | MSBuildTaskDeclaration, 25 | MSBuildTaskUsage 26 | } 27 | 28 | public class Reference 29 | { 30 | public string ToAssemblyId { get; set; } 31 | public string FromAssemblyId { get; set; } 32 | public string ToSymbolId { get; set; } 33 | public string FromLocalPath { get; set; } 34 | public string Url { get; set; } 35 | public string ReferenceLineText { get; set; } 36 | public int ReferenceColumnStart { get; set; } 37 | public int ReferenceColumnEnd { get; set; } 38 | public int ReferenceLineNumber { get; set; } 39 | public string ToSymbolName { get; set; } 40 | public ReferenceKind Kind { get; set; } 41 | 42 | public Reference() 43 | { 44 | } 45 | 46 | public Reference(string separatedLine, string sourceLine) 47 | { 48 | var parts = separatedLine.Split(';'); 49 | FromAssemblyId = string.Intern(parts[0]); 50 | Url = parts[1]; 51 | FromLocalPath = parts[2]; 52 | ReferenceLineNumber = int.Parse(parts[3]); 53 | ReferenceColumnStart = int.Parse(parts[4]); 54 | ReferenceColumnEnd = int.Parse(parts[5]); 55 | if (parts.Length >= 7) 56 | { 57 | Kind = (ReferenceKind)int.Parse(parts[6]); 58 | } 59 | 60 | ReferenceLineText = sourceLine; 61 | ToSymbolName = ReferenceLineText.Substring(ReferenceColumnStart, ReferenceColumnEnd - ReferenceColumnStart); 62 | } 63 | 64 | public void WriteTo(TextWriter writer) 65 | { 66 | writer.Write(FromAssemblyId); 67 | writer.Write(';'); 68 | writer.Write(Url); 69 | writer.Write(';'); 70 | writer.Write(FromLocalPath); 71 | writer.Write(';'); 72 | writer.Write(ReferenceLineNumber); 73 | writer.Write(';'); 74 | writer.Write(ReferenceColumnStart); 75 | writer.Write(';'); 76 | writer.Write(ReferenceColumnEnd); 77 | writer.Write(';'); 78 | writer.Write((int)Kind); 79 | writer.WriteLine(); 80 | writer.WriteLine(ReferenceLineText); 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /src/HtmlGenerator/Utilities/SymbolKindText.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Microsoft.CodeAnalysis; 4 | 5 | namespace Microsoft.SourceBrowser.HtmlGenerator 6 | { 7 | public class SymbolKindText 8 | { 9 | public const string Assembly = "assembly"; 10 | public const string Type = "type"; 11 | public const string Class = "class"; 12 | public const string Struct = "struct"; 13 | public const string Interface = "interface"; 14 | public const string Enum = "enum"; 15 | public const string Delegate = "delegate"; 16 | public const string Method = "method"; 17 | public const string Property = "property"; 18 | public const string Event = "event"; 19 | public const string Field = "field"; 20 | public const string File = "file"; 21 | public const string Default = "symbol"; 22 | 23 | public static readonly string[] Kinds = 24 | { 25 | Assembly, 26 | Type, 27 | Class, 28 | Struct, 29 | Interface, 30 | Enum, 31 | Delegate, 32 | Method, 33 | Property, 34 | Event, 35 | Field, 36 | File, 37 | }; 38 | private static readonly HashSet hashtable = new HashSet(Kinds); 39 | 40 | public static string GetSymbolKind(ISymbol declaredSymbol) 41 | { 42 | if (declaredSymbol.Kind == SymbolKind.NamedType) 43 | { 44 | return GetTypeKind(declaredSymbol); 45 | } 46 | 47 | return declaredSymbol.Kind.ToString().ToLowerInvariant(); 48 | } 49 | 50 | public static string GetTypeKind(ISymbol declaredSymbol) 51 | { 52 | return ((INamedTypeSymbol)declaredSymbol).TypeKind.ToString().ToLowerInvariant(); 53 | } 54 | 55 | public static ushort Rank(string kind) 56 | { 57 | switch (kind) 58 | { 59 | case SymbolKindText.Class: 60 | case SymbolKindText.Struct: 61 | case SymbolKindText.Interface: 62 | case SymbolKindText.Enum: 63 | case SymbolKindText.Delegate: 64 | return 1; 65 | case SymbolKindText.Field: 66 | return 3; 67 | case SymbolKindText.File: 68 | return 4; 69 | default: 70 | return 2; 71 | } 72 | } 73 | 74 | public static bool IsKnown(string term) 75 | { 76 | return hashtable.Contains(term); 77 | } 78 | 79 | public static bool IsType(string kind) 80 | { 81 | return 82 | kind == Class || 83 | kind == Struct || 84 | kind == Interface || 85 | kind == Enum || 86 | kind == Delegate; 87 | } 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /src/HtmlGenerator/Utilities/SymbolSorter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace Microsoft.SourceBrowser.HtmlGenerator 5 | { 6 | public class SymbolSorter 7 | { 8 | public static void SortSymbols(List declaredSymbols) 9 | { 10 | declaredSymbols.Sort(Sorter); 11 | } 12 | 13 | private static int Sorter(DeclaredSymbolInfo left, DeclaredSymbolInfo right) 14 | { 15 | if (left == right) 16 | { 17 | return 0; 18 | } 19 | 20 | if (left == null || right == null) 21 | { 22 | return 1; 23 | } 24 | 25 | int comparison = StringComparer.OrdinalIgnoreCase.Compare(left.Name, right.Name); 26 | if (comparison != 0) 27 | { 28 | return comparison; 29 | } 30 | 31 | comparison = left.KindRank.CompareTo(right.KindRank); 32 | if (comparison != 0) 33 | { 34 | return comparison; 35 | } 36 | 37 | comparison = StringComparer.Ordinal.Compare(left.Name, right.Name); 38 | if (comparison != 0) 39 | { 40 | return comparison; 41 | } 42 | 43 | comparison = left.AssemblyNumber.CompareTo(right.AssemblyNumber); 44 | return comparison; 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/HtmlGenerator/Utilities/WorkspaceHacks.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Reflection; 3 | using Microsoft.CodeAnalysis; 4 | using Microsoft.CodeAnalysis.Host; 5 | 6 | namespace Microsoft.SourceBrowser.HtmlGenerator 7 | { 8 | public static class WorkspaceHacks 9 | { 10 | public static dynamic GetSemanticFactsService(Document document) 11 | { 12 | return GetService(document, "Microsoft.CodeAnalysis.LanguageService.ISemanticFactsService", "Microsoft.CodeAnalysis.Workspaces"); 13 | } 14 | 15 | public static dynamic GetSyntaxFactsService(Document document) 16 | { 17 | return GetService(document, "Microsoft.CodeAnalysis.LanguageService.ISyntaxFactsService", "Microsoft.CodeAnalysis.Workspaces"); 18 | } 19 | 20 | public static object GetMetadataAsSourceService(Document document) 21 | { 22 | var language = document.Project.Language; 23 | var workspace = document.Project.Solution.Workspace; 24 | var serviceAssembly = Assembly.Load("Microsoft.CodeAnalysis.Features"); 25 | var serviceInterfaceType = serviceAssembly.GetType("Microsoft.CodeAnalysis.MetadataAsSource.IMetadataAsSourceService"); 26 | var result = GetService(workspace, language, serviceInterfaceType); 27 | return result; 28 | } 29 | 30 | private static object GetService(Workspace workspace, string language, Type serviceType) 31 | { 32 | var languageServices = workspace.Services.GetLanguageServices(language); 33 | var languageServicesType = typeof(HostLanguageServices); 34 | var genericMethod = languageServicesType.GetMethod("GetService", BindingFlags.Public | BindingFlags.Instance); 35 | var closedGenericMethod = genericMethod.MakeGenericMethod(serviceType); 36 | var result = closedGenericMethod.Invoke(languageServices, Array.Empty()); 37 | if (result == null) 38 | { 39 | throw new NullReferenceException("Unable to get language service: " + serviceType.FullName + " for " + language); 40 | } 41 | 42 | return result; 43 | } 44 | 45 | private static object GetService(Document document, string serviceType, string assemblyName) 46 | { 47 | var serviceAssembly = Assembly.Load(assemblyName); 48 | var serviceInterfaceType = serviceAssembly.GetType(serviceType); 49 | var genericMethod = typeof(LanguageServices).GetMethod(nameof(LanguageServices.GetService), BindingFlags.Public | BindingFlags.Instance); 50 | var closedGenericMethod = genericMethod.MakeGenericMethod(serviceInterfaceType); 51 | var service = closedGenericMethod.Invoke(document.Project.Services, Array.Empty()); 52 | return service; 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/HtmlGenerator/Utilities/XmlDocumentationProvider.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Globalization; 3 | using System.Threading; 4 | using System.Xml.Linq; 5 | using Microsoft.CodeAnalysis; 6 | 7 | namespace Microsoft.SourceBrowser.HtmlGenerator 8 | { 9 | public class XmlDocumentationProvider : DocumentationProvider 10 | { 11 | private readonly Dictionary members = new Dictionary(); 12 | 13 | public XmlDocumentationProvider(string filePath) 14 | { 15 | var xmlDocFile = XDocument.Load(filePath); 16 | 17 | foreach (var member in xmlDocFile.Descendants("member")) 18 | { 19 | var id = member.Attribute("name").Value; 20 | var value = member.ToString(); 21 | 22 | // there might be multiple entries with same id, just pick one at random 23 | members[id] = value; 24 | } 25 | } 26 | 27 | protected override string GetDocumentationForSymbol( 28 | string documentationMemberID, 29 | CultureInfo preferredCulture, 30 | CancellationToken cancellationToken = default(CancellationToken)) 31 | { 32 | members.TryGetValue(documentationMemberID, out string result); 33 | return result; 34 | } 35 | 36 | public override int GetHashCode() 37 | { 38 | return members.GetHashCode(); 39 | } 40 | 41 | public override bool Equals(object obj) 42 | { 43 | return this == obj; 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /src/HtmlGenerator/Web/index/AffiliateLinks.txt: -------------------------------------------------------------------------------- 1 | http://stackoverflow.com/search?q= 2 | http://social.msdn.microsoft.com/Search/en-US?query= 3 | https://www.google.com/search?q= 4 | http://www.bing.com/search?q= -------------------------------------------------------------------------------- /src/HtmlGenerator/app.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/MEF/ContextKeys.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.SourceBrowser.MEF 2 | { 3 | public static class ContextKeys 4 | { 5 | public const string FilePath = "FilePath"; 6 | public const string LineNumber = "LineNumber"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/MEF/ILog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Microsoft.SourceBrowser.MEF 4 | { 5 | public interface ILog 6 | { 7 | void Debug(string message, Exception ex = null); 8 | void Verbose(string message, Exception ex = null); 9 | void Info(string message, Exception ex = null); 10 | void Status(string message, Exception ex = null); 11 | void Warning(string message, Exception ex = null); 12 | void Error(string message, Exception ex = null); 13 | void Critical(string message, Exception ex = null); 14 | void Fatal(string message, Exception ex = null); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/MEF/ISourceBrowserPlugin.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Microsoft.SourceBrowser.MEF 4 | { 5 | public interface ISourceBrowserPlugin 6 | { 7 | void Init(Dictionary configuration, ILog logger); 8 | IEnumerable ManufactureSymbolVisitors(string projectPath); 9 | IEnumerable ManufactureTextVisitors(string projectPath); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/MEF/ISourceBrowserPluginMetadata.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.SourceBrowser.MEF 2 | { 3 | public interface ISourceBrowserPluginMetadata 4 | { 5 | string Name { get; } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/MEF/ISymbolVisitor.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Microsoft.CodeAnalysis; 3 | 4 | namespace Microsoft.SourceBrowser.MEF 5 | { 6 | public interface ISymbolVisitor 7 | { 8 | string VisitAlias(IAliasSymbol symbol, IReadOnlyDictionary context); 9 | string VisitArrayType(IArrayTypeSymbol symbol, IReadOnlyDictionary context); 10 | string VisitAssembly(IAssemblySymbol symbol, IReadOnlyDictionary context); 11 | string VisitDynamicType(IDynamicTypeSymbol symbol, IReadOnlyDictionary context); 12 | string VisitEvent(IEventSymbol symbol, IReadOnlyDictionary context); 13 | string VisitField(IFieldSymbol symbol, IReadOnlyDictionary context); 14 | string VisitLabel(ILabelSymbol symbol, IReadOnlyDictionary context); 15 | string VisitLocal(ILocalSymbol symbol, IReadOnlyDictionary context); 16 | string VisitMethod(IMethodSymbol symbol, IReadOnlyDictionary context); 17 | string VisitModule(IModuleSymbol symbol, IReadOnlyDictionary context); 18 | string VisitNamedType(INamedTypeSymbol symbol, IReadOnlyDictionary context); 19 | string VisitNamespace(INamespaceSymbol symbol, IReadOnlyDictionary context); 20 | string VisitParameter(IParameterSymbol symbol, IReadOnlyDictionary context); 21 | string VisitPointerType(IPointerTypeSymbol symbol, IReadOnlyDictionary context); 22 | string VisitProperty(IPropertySymbol symbol, IReadOnlyDictionary context); 23 | string VisitRangeVariable(IRangeVariableSymbol symbol, IReadOnlyDictionary context); 24 | string VisitTypeParameter(ITypeParameterSymbol symbol, IReadOnlyDictionary context); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/MEF/ITextVisitor.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Microsoft.SourceBrowser.MEF 4 | { 5 | public interface ITextVisitor 6 | { 7 | string Visit(string text, IReadOnlyDictionary context); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/MEF/MEF.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | net472 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | all 15 | runtime; build; native; contentfiles; analyzers 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/MEF/SourceBrowserPluginWrapper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Reflection; 7 | 8 | namespace Microsoft.SourceBrowser.MEF 9 | { 10 | /// 11 | /// A wrapper around MEF-imported objects to prevent exceptions from bubbling up 12 | /// 13 | public class SourceBrowserPluginWrapper : ISourceBrowserPlugin, ISourceBrowserPluginMetadata 14 | { 15 | private ISourceBrowserPluginMetadata Metadata; 16 | private ISourceBrowserPlugin Plugin; 17 | private ILog Logger; 18 | 19 | public SourceBrowserPluginWrapper(ISourceBrowserPlugin plugin, ISourceBrowserPluginMetadata metadata, ILog logger) 20 | { 21 | Plugin = plugin; 22 | Metadata = metadata; 23 | Logger = logger; 24 | } 25 | 26 | public string Name 27 | { 28 | get 29 | { 30 | try 31 | { 32 | return Metadata.Name; 33 | } 34 | catch (Exception ex) 35 | { 36 | Logger.Info("Couldn't retrieve plugin name", ex); 37 | return "Unknown Plugin"; 38 | } 39 | } 40 | } 41 | 42 | public void Init(Dictionary configuration, ILog logger) 43 | { 44 | try 45 | { 46 | Plugin.Init(configuration, logger); 47 | } 48 | catch (Exception ex) 49 | { 50 | Logger.Info(Name + " plugin failed to initialize", ex); 51 | } 52 | } 53 | 54 | public IEnumerable ManufactureSymbolVisitors(string projectPath) 55 | { 56 | try 57 | { 58 | return Plugin.ManufactureSymbolVisitors(projectPath); 59 | } 60 | catch (Exception ex) 61 | { 62 | Logger.Info(Name + " plugin failed to manufacture symbol visitors", ex); 63 | return Enumerable.Empty(); 64 | } 65 | } 66 | 67 | public IEnumerable ManufactureTextVisitors(string projectPath) 68 | { 69 | try 70 | { 71 | return Plugin.ManufactureTextVisitors(projectPath); 72 | } 73 | catch (Exception ex) 74 | { 75 | Logger.Info(Name + " plugin failed to manufacture text visitors", ex); 76 | return Enumerable.Empty(); 77 | } 78 | } 79 | 80 | public Module PluginModule => Plugin.GetType().Module; 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/SourceIndexServer.Tests/SourceIndexServer.Tests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net6.0 5 | 6 | 7 | 8 | 9 | PreserveNewest 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/SourceIndexServer/Controllers/OpenSearchController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Text; 3 | using Microsoft.AspNetCore.Mvc; 4 | 5 | namespace Microsoft.SourceBrowser.SourceIndexServer.Controllers 6 | { 7 | [ApiController] 8 | public class OpenSearchController : Controller 9 | { 10 | [HttpGet("/opensearch")] 11 | public IActionResult GetOpenSearchDescriptionDocument() 12 | { 13 | var pathBase = String.IsNullOrWhiteSpace(Request.PathBase) ? "" : "/" + Request.PathBase; 14 | var urlBase = $"{Request.Scheme}://{Request.Host}{pathBase}"; 15 | var result = String.Join("\r\n", 16 | "", 17 | "", 18 | " Source Browser", 19 | $" {urlBase}/favicon.ico", 20 | $" ", 21 | "" 22 | ); 23 | return Content(result, "application/opensearchdescription+xml", Encoding.UTF8); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/SourceIndexServer/Models/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.SourceBrowser.SourceIndexServer 2 | { 3 | public struct AssemblyInfo 4 | { 5 | public string AssemblyName; 6 | public short ProjectKey; 7 | public short ReferencingAssembliesCount; 8 | 9 | public AssemblyInfo(string line) 10 | { 11 | var parts = line.Split(';'); 12 | AssemblyName = parts[0]; 13 | ProjectKey = short.Parse(parts[1]); 14 | ReferencingAssembliesCount = short.Parse(parts[2]); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/SourceIndexServer/Models/Constants.cs: -------------------------------------------------------------------------------- 1 | namespace Microsoft.SourceBrowser.SourceIndexServer 2 | { 3 | public class Constants 4 | { 5 | public static readonly string MasterAssemblyMap = "Assemblies"; 6 | public static readonly string MasterProjectMap = "Projects"; 7 | public static readonly string MSBuildPropertiesAssembly = "MSBuildProperties"; 8 | public static readonly string MSBuildItemsAssembly = "MSBuildItems"; 9 | public static readonly string MSBuildTargetsAssembly = "MSBuildTargets"; 10 | public static readonly string MSBuildTasksAssembly = "MSBuildTasks"; 11 | public static readonly string ReferencesFileName = "R"; 12 | public static readonly string GuidAssembly = "GuidAssembly"; 13 | } 14 | } -------------------------------------------------------------------------------- /src/SourceIndexServer/Models/DeclaredSymbolInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Microsoft.SourceBrowser.SourceIndexServer 4 | { 5 | public class DeclaredSymbolInfo : IEquatable 6 | { 7 | public ushort AssemblyNumber; 8 | public string AssemblyName { get; set; } 9 | public string ProjectFilePath { get; set; } 10 | public ushort Glyph; 11 | public string Name; 12 | public ulong ID; 13 | public string Kind; 14 | public string Description; 15 | public ushort MatchLevel; 16 | 17 | public DeclaredSymbolInfo() 18 | { 19 | } 20 | 21 | public ushort KindRank 22 | { 23 | get 24 | { 25 | return SymbolKindText.Rank(Kind); 26 | } 27 | } 28 | 29 | public string GetNamespace() 30 | { 31 | var description = Description; 32 | if (string.IsNullOrEmpty(description)) 33 | { 34 | return ""; 35 | } 36 | 37 | int lastDot = description.LastIndexOf('.'); 38 | if (lastDot == -1) 39 | { 40 | return ""; 41 | } 42 | 43 | return description.Substring(0, lastDot); 44 | } 45 | 46 | public int Weight 47 | { 48 | get 49 | { 50 | return MatchLevel * 10 + KindRank; 51 | } 52 | } 53 | 54 | public bool Equals(DeclaredSymbolInfo other) 55 | { 56 | if (other == null) 57 | { 58 | return false; 59 | } 60 | 61 | return 62 | AssemblyNumber == other.AssemblyNumber && 63 | ProjectFilePath == other.ProjectFilePath && 64 | Glyph == other.Glyph && 65 | Name == other.Name && 66 | Kind == other.Kind && 67 | ID == other.ID && 68 | Description == other.Description; 69 | } 70 | 71 | public string GetUrl() 72 | { 73 | return "/" + AssemblyName + "/A.html#" + Serialization.ULongToHexString(ID); 74 | } 75 | 76 | public override bool Equals(object obj) 77 | { 78 | DeclaredSymbolInfo other = obj as DeclaredSymbolInfo; 79 | if (other == null) 80 | { 81 | return false; 82 | } 83 | 84 | return Equals(other); 85 | } 86 | 87 | public override int GetHashCode() 88 | { 89 | return 90 | AssemblyNumber.GetHashCode() ^ 91 | ProjectFilePath.GetHashCode() ^ 92 | Glyph.GetHashCode() ^ 93 | Name.GetHashCode() ^ 94 | Kind.GetHashCode() ^ 95 | Description.GetHashCode() ^ 96 | ID.GetHashCode(); 97 | } 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /src/SourceIndexServer/Models/SymbolKindText.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace Microsoft.SourceBrowser.SourceIndexServer 4 | { 5 | public class SymbolKindText 6 | { 7 | public const string Assembly = "assembly"; 8 | public const string Type = "type"; 9 | public const string Class = "class"; 10 | public const string Struct = "struct"; 11 | public const string Interface = "interface"; 12 | public const string Enum = "enum"; 13 | public const string Delegate = "delegate"; 14 | public const string Method = "method"; 15 | public const string Property = "property"; 16 | public const string Event = "event"; 17 | public const string Field = "field"; 18 | public const string File = "file"; 19 | public const string MSBuildProperty = "MSBuildProperty"; 20 | public const string MSBuildItem = "MSBuildItem"; 21 | public const string MSBuildTarget = "MSBuildTarget"; 22 | public const string MSBuildTask = "MSBuildTask"; 23 | public const string Default = "symbol"; 24 | 25 | public static readonly string[] Kinds = 26 | { 27 | Assembly, 28 | Type, 29 | Class, 30 | Struct, 31 | Interface, 32 | Enum, 33 | Delegate, 34 | Method, 35 | Property, 36 | Event, 37 | Field, 38 | File, 39 | MSBuildProperty, 40 | MSBuildItem, 41 | MSBuildTarget, 42 | MSBuildTask, 43 | }; 44 | private static readonly HashSet hashtable = new HashSet(Kinds); 45 | 46 | public static ushort Rank(string kind) 47 | { 48 | switch (kind) 49 | { 50 | case Class: 51 | case Struct: 52 | case Interface: 53 | case Enum: 54 | case Delegate: 55 | return 1; 56 | case Field: 57 | return 3; 58 | case File: 59 | return 4; 60 | default: 61 | return 2; 62 | } 63 | } 64 | 65 | public static bool IsKnown(string term) 66 | { 67 | return hashtable.Contains(term); 68 | } 69 | 70 | public static bool IsType(string kind) 71 | { 72 | return 73 | kind == Class || 74 | kind == Struct || 75 | kind == Interface || 76 | kind == Enum || 77 | kind == Delegate; 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/SourceIndexServer/Program.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Hosting; 2 | using Microsoft.Extensions.Hosting; 3 | 4 | namespace Microsoft.SourceBrowser.SourceIndexServer 5 | { 6 | public class Program 7 | { 8 | public static void Main(string[] args) 9 | { 10 | BuildWebHost(args).Run(); 11 | } 12 | 13 | public static IHost BuildWebHost(string[] args) => 14 | Host.CreateDefaultBuilder(args) 15 | .ConfigureWebHostDefaults( 16 | builder => { builder 17 | .UseStartup(); }) 18 | .UseWindowsService() 19 | .Build(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/SourceIndexServer/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iisExpress": { 6 | "applicationUrl": "http://localhost:58320/", 7 | "sslPort": 0 8 | } 9 | }, 10 | "profiles": { 11 | "IIS Express": { 12 | "commandName": "IISExpress", 13 | "launchBrowser": true, 14 | "environmentVariables": { 15 | "ASPNETCORE_ENVIRONMENT": "Development" 16 | } 17 | }, 18 | "SourceIndexServer": { 19 | "commandName": "Project", 20 | "launchBrowser": true, 21 | "environmentVariables": { 22 | "ASPNETCORE_ENVIRONMENT": "Development" 23 | }, 24 | "applicationUrl": "http://localhost:58321" 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /src/SourceIndexServer/SourceIndexServer.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net6.0 5 | Microsoft.SourceBrowser.SourceIndexServer 6 | Microsoft.SourceBrowser.SourceIndexServer 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/SourceIndexServer/Startup.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using Microsoft.AspNetCore.Builder; 3 | using Microsoft.AspNetCore.Hosting; 4 | using Microsoft.Extensions.DependencyInjection; 5 | using Microsoft.Extensions.FileProviders; 6 | using Microsoft.Extensions.FileProviders.Physical; 7 | using Microsoft.Extensions.Hosting; 8 | using Microsoft.SourceBrowser.SourceIndexServer.Models; 9 | 10 | namespace Microsoft.SourceBrowser.SourceIndexServer 11 | { 12 | public class Startup 13 | { 14 | public Startup(IWebHostEnvironment env) 15 | { 16 | Environment = env; 17 | } 18 | 19 | public IWebHostEnvironment Environment { get; } 20 | 21 | // This method gets called by the runtime. Use this method to add services to the container. 22 | // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 23 | public void ConfigureServices(IServiceCollection services) 24 | { 25 | RootPath = Path.Combine(Environment.ContentRootPath, "index"); 26 | 27 | var subfolder = Path.Combine(RootPath, "index"); 28 | if (File.Exists(Path.Combine(subfolder, "Projects.txt"))) 29 | { 30 | RootPath = subfolder; 31 | } 32 | 33 | services.AddSingleton(new Index(RootPath)); 34 | services.AddControllersWithViews(); 35 | services.AddRazorPages(); 36 | } 37 | 38 | public string RootPath { get; set; } 39 | 40 | // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 41 | public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 42 | { 43 | app.Use(async (context, next) => 44 | { 45 | context.Response.Headers["X-UA-Compatible"] = "IE=edge"; 46 | await next(); 47 | }); 48 | 49 | if (env.IsDevelopment()) 50 | { 51 | app.UseDeveloperExceptionPage(); 52 | } 53 | 54 | app.UseDefaultFiles(); 55 | app.UseStaticFiles(new StaticFileOptions 56 | { 57 | FileProvider = new PhysicalFileProvider(RootPath, ExclusionFilters.Sensitive & ~ExclusionFilters.DotPrefixed), 58 | }); 59 | app.UseStaticFiles(); 60 | app.UseRouting(); 61 | 62 | 63 | app.UseEndpoints(endPoints => 64 | { 65 | endPoints.MapRazorPages(); 66 | endPoints.MapControllers(); 67 | }); 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/0.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/1.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/10.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/100.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/101.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/102.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/102.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/103.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/103.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/104.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/104.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/105.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/106.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/106.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/107.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/107.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/108.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/109.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/109.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/11.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/110.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/111.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/111.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/112.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/113.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/113.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/114.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/115.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/115.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/116.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/116.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/117.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/117.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/118.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/118.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/119.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/119.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/12.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/120.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/121.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/121.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/122.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/122.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/123.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/123.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/124.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/124.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/125.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/126.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/126.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/127.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/127.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/128.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/129.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/129.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/13.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/130.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/131.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/131.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/132.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/132.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/133.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/133.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/134.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/134.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/135.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/135.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/136.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/136.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/137.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/137.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/138.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/138.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/139.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/139.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/14.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/140.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/141.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/141.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/142.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/142.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/143.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/143.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/144.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/145.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/145.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/146.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/146.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/147.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/147.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/148.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/148.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/149.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/149.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/15.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/150.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/151.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/151.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/152.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/153.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/153.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/154.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/154.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/155.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/155.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/156.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/156.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/157.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/157.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/158.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/158.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/159.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/159.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/16.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/160.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/161.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/161.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/162.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/162.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/163.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/163.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/164.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/164.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/165.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/165.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/166.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/166.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/167.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/168.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/168.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/169.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/169.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/17.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/170.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/170.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/171.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/171.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/172.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/173.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/173.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/174.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/174.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/175.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/175.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/176.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/176.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/177.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/177.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/178.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/178.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/179.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/179.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/18.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/180.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/181.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/181.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/182.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/182.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/183.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/183.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/184.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/184.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/185.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/185.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/186.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/186.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/187.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/187.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/188.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/188.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/189.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/189.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/19.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/190.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/190.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/191.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/191.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/192.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/193.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/193.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/194.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/194.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/195.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/195.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/196.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/197.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/197.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/198.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/198.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/199.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/199.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/2.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/20.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/200.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/201.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/201.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/202.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/202.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/203.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/203.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/204.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/204.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/205.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/205.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/206.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/206.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/207.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/207.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/208.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/208.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/209.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/209.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/21.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/210.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/210.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/211.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/211.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/212.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/212.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/213.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/213.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/214.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/214.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/215.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/215.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/216.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/217.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/217.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/218.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/218.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/219.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/219.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/22.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/220.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/220.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/221.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/221.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/222.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/222.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/223.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/223.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/224.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/224.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/225.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/225.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/226.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/226.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/227.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/227.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/228.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/228.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/229.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/229.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/23.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/230.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/230.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/231.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/231.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/232.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/232.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/233.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/233.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/234.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/234.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/235.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/235.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/24.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/25.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/26.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/27.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/28.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/29.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/3.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/30.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/31.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/32.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/33.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/34.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/35.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/36.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/37.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/38.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/39.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/4.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/40.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/41.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/42.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/43.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/44.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/45.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/46.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/47.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/48.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/49.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/5.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/50.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/51.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/52.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/53.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/54.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/55.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/56.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/57.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/58.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/59.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/6.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/60.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/61.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/62.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/63.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/64.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/65.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/65.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/66.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/67.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/68.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/68.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/69.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/7.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/70.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/71.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/72.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/73.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/74.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/75.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/76.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/77.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/78.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/78.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/79.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/79.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/8.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/80.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/81.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/82.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/82.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/83.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/83.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/84.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/84.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/85.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/85.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/86.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/86.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/87.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/88.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/89.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/89.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/9.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/90.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/91.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/92.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/93.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/93.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/94.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/94.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/95.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/95.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/96.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/97.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/97.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/98.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/99.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/99.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/CSharpProjectExplorer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/CSharpProjectExplorer.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/DocumentOutline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/DocumentOutline.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/NamespaceExplorer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/NamespaceExplorer.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/VBProjectExplorer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/VBProjectExplorer.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/csharp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/csharp.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/dotnet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/dotnet.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/help.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/microsoftlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/microsoftlogo.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/minus.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/plus.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/resx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/resx.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/searchmagnifyingglass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/searchmagnifyingglass.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/typescript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/typescript.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/vb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/vb.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/xaml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/xaml.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/content/icons/xml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/content/icons/xml.png -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/documentoutline.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Document Outline 5 | 6 | 7 | 8 | 9 |
Outline
10 |
11 |
12 | 13 | 14 | -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KirillOsenkov/SourceBrowser/bf64cd8ac09f60e605e1a86784da47cc2c034a89/src/SourceIndexServer/wwwroot/favicon.ico -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/header.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Header 5 | 6 | 7 | 8 | 9 | 10 | 11 | 18 | Source Browser 19 | 20 | 21 | Help 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/SourceIndexServer/wwwroot/index.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Source Browser 6 | 7 | 8 | 9 | 10 | 13 | 19 | 25 | 32 | 39 | 40 | 41 | 42 | --------------------------------------------------------------------------------