codeconnect / sourcebrowser Goto Github PK
View Code? Open in Web Editor NEWC# in. HTML out.
Home Page: http://sourcebrowser.io
License: MIT License
C# in. HTML out.
Home Page: http://sourcebrowser.io
License: MIT License
In the file AbstractWorkspaceVisitor.cs there are 4 usages of the method VisitProjectItem on lines 24, 31, 59 and 67. Only the first usage on line 24 is a link to the method definition.
@SLaks has created a Visual Studio Extension called Ref12.
It allows users to use F12 (Go to definition) on .Net and Roslyn types and methods.
He suggested we could create an HTTP API that exposed the assemblies for which we had source code. This would allow him to add support for Source Browser assemblies within his extension.
We will need to do two things:
For example in C# there are partial methods and partial classes that will be defined in multiple places. Currently, we just (randomly) choose one of the definitions and link to it.
This is bug number two in #57
I click on the "parent" argument variable on this line:
http://sourcebrowser.io/Browse/CodeConnect/SourceBrowser/SourceBrowser.Generator/DocumentWalker.cs#33
and it takes me here:
http://sourcebrowser.io/Browse/CodeConnect/SourceBrowser/SourceBrowser.Generator/Transformers/AbstractWorkspaceVisitor.cs#35
instead of to the line where the argument is declared. Similar things happen for links on other symbols too.
As mentioned by @AmadeusW in #63, we need to handle static constructors properly. In C#, the fully qualified name of a static constructor is not enough to differentiate it from a parameterless constructor.
In another project, we solved this issue by adding an "isStatic" property to constructors. However, I'm not convinced that this is the best solution for Source Browser. It couples our model to the C# programming language.
Perhaps instead we can alter the fully qualified names of static constructors instead.
Namespace.Class.Constructor::static
or something along those lines.
We should not allow the same repository to be uploaded twice.
We should not allow the same repository to be uploaded while it is being uploaded. See #32.
Repo: https://github.com/madskristensen/WebEssentials2013
Error:
The file 'C:\inetpub\wwwroot\GithubStaging\madskristensen\WebEssentials2013\WebEssentials2013-master\EditorExtensions\JavaScript\Commands\JavaScriptCreationListener.cs' already exists
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at System.IO.File.Open(String path, FileMode mode, FileAccess access, FileShare share)
at System.IO.Compression.ZipFileExtensions.ExtractToFile(ZipArchiveEntry source, String destinationFileName, Boolean overwrite)
at System.IO.Compression.ZipFileExtensions.ExtractToDirectory(ZipArchive source, String destinationDirectoryName)
at System.IO.Compression.ZipFile.ExtractToDirectory(String sourceArchiveFileName, String destinationDirectoryName, Encoding entryNameEncoding)
at SourceBrowser.SolutionRetriever.GitHubRetriever.RetrieveProject()
at SourceBrowser.Site.Controllers.UploadController.Submit(String githubUrl)
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.<BeginInvokeAction>b__1c()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult);
Currently there is on licence in this repo, which makes it not really open-source.
Please choose and add one :)
Fetch relevant information from github's API and display it in sourcebrowser.
In commit d44e31b NuGet package restore through msbuild was introduced. However this is not the recomended solution by NuGet (it was some time ago but not anymore). More details here: http://docs.nuget.org/docs/reference/package-restore
NuGet recomends to not touch anything in csproj. Visual Studio will download automatically download the packages even if automatic package restore in MSBuild is not enabled. When building from command line (build server) there should be a separte build steps which restores the packages ( nuget restore
).
Solution for this is simple: Simply reverse the d44e31b or close the issue if you have not the same opinion.
We should incorporate tests into the project.
We should have something other than the default favicon.
I think we should figure out what we'd like to see out of a search feature before we start working on this.
Personally, when using Microsoft's Reference Source, I search for documents, types or type members (fields, methods, properties etc.) I'm typically trying to uncover information about an API I'm using and how it's implemented.
Typically, I search for one keyword at a time. I'm usually looking for a specific class or method by its name.
Our search indexes will be updated rarely and will be primarily read heavy. We'll be updating (at most) after each commit to a repository.
I don't believe ranking of search results will be particularly important to us.
I think using Lucene may be a bit of an overkill for us. I'll invite my friend @areek (who is a Lucene comitter) to weigh in on this for us.
Currently the Generator is a console-application (well Program.cs is not really implemented, so not sure if you are using it as console-application). But in my opinion a DLL would be the cleaner output, since it can then be put on nuget and reused in different places.
There should still be a console-application (SourceBrowser.exe, SourceBrowser.Generator.Console.csproj) which takes two parameters (solution path and output path) and passes it to the lib. The console-application should then be pushed to chocolatey
Since the packages folder was checked in, the git repository is quite big. Consider cleaning the history: https://help.github.com/articles/remove-sensitive-data/
Since the VisualStudio project is directly in the root of the repository, there is no possibility to add e.g. a test project or docs. Consider reorganising it to something like
docs\
tests\
src\SourceBrowser.Generator\...
SourceBrowser.Generator.sln
or
SourceBrowser.Generator\...
SourceBrowser.Generator.sln
or ignore and close the issue if you don't like it ;)
There is very little difference between these two classes, but every time we need to update one, we have to mirror the changes in the other. We should make these one single class that works for both C# and VB .Net.
Every comment with metadata is missing the '///' on the first line of the comment. Example: http://sourcebrowser.io/Browse/NancyFx/Nancy.Serialization.JsonNet/Helpers.cs
<summary>
/// Attempts to detect if the content type is JSON.
/// Supports:
/// application/json
/// text/json
/// application/vnd[something]+json
/// Matches are case insentitive to try and be as "accepting" as possible.
/// </summary>
/// <param name="contentType">Request content type</param>
/// <returns>True if content type is JSON, false otherwise</returns>
So I was checking that #48 was fixed and I noticed that it took an extremely long time to upload. (~15 minutes).
We should investigate why this was the case and if we can mitigate it. Maybe we can scale our server up a level.
Here's some summary info on the upload. Looks like the CPU usage might be the issue here. We should profile locally and find out bottlenecks. (I suspect it's building the Lucene index)
Suppose there are two search results:
1 points to
http://localhost:57806/Browse/JamesNK/Newtonsoft.Json/Src/Newtonsoft.Json/Serialization/JsonContract.cs#300
, and
2 points to
http://localhost:57806/Browse/JamesNK/Newtonsoft.Json/Src/Newtonsoft.Json/Serialization/JsonDictionaryContract.cs#42
When clicking on the link takes the user to a different HTML page, page does not scroll to the specified anchor. User needs to click on the link again (or on another search result which also points to the same HTML page) in order to end up on the target line.
In this example, clicking at results 1, 2, 1, 2 simply loads alternating HTML pages but doesn't take the user to the target line. However, clicking at results 1, 2, 2 takes the user to line 42.
GitHubInformationRetriever.GetRepoInformation() and .GitHubInformationRetriever.GetUserInformation() are called every time a user or repository is browsed. This creates a request to GitHub.
We should persist this information and load it ourselves. We're probably going to need a database or datastore for this, though.
On http://sourcebrowser.io/Upload/ when the GitHub url contains a trailing '/' (e.g. https://github.com/CodeConnect/SourceBrowser/ ) there is an exception.
We had reports of people repeatedly clicking "Upload", because it isn't clear that under the hood Source Browser is actually working and processing a repo.
User should know that the repo is being processed. Perhaps the upload button should be disabled.
When implementing the PR #13 I realized that the current design is not that flexible. We should discuss about some enhancements in the design ๐
Problems of the current design I see (personal opinion):
Thoughts?
Working at the token level has created some issues relating to constructors not linking correctly.
For example: http://sourcebrowser.io/Browse/RaYell/selenium-webdriver-extensions/src/Selenium.WebDriver.Extensions/By.cs#27
The constructor links incorrectly to: http://sourcebrowser.io/Browse/RaYell/selenium-webdriver-extensions/test/Selenium.WebDriver.Extensions.Tests/JQuerySelectorTests.cs#124
This is due to two bugs. The first is due to the following:
When traversing documents at the token level, occasionally we link to the type instead of the constructor.
For example retrieving the symbol for an ObjectExpressionSyntax like:
new JQuerySelector(selector, context, jQueryVariable)
will work correctly.
However, as we work with individual tokens, we're retrieving the symbol for the IdentifierSyntax:
JQuerySelector
which will provide a symbol that refers to the type instead of the constructor.
So in theory we should be linked to the JQuerySelector type.
We're not because of a second bug that is closely related to #57. We're not handling parameters correctly when they appear in method declarations. I'll reopen #57 and provide an explanation there.
Generator.Model.WorkspaceModel workspaceModel;
try
{
workspaceModel = UploadRepository.ProcessSolution(solutionPath, repoRootPath);
}
catch (ReflectionTypeLoadException ex)
{
ViewBag.Error = "Sorry, there was an error processing solution " + Path.GetFileName(solutionPath) + ". ";
ViewBag.Error += ex.ToString();
foreach (var item in ex.LoaderExceptions)
{
ViewBag.Error += "\n; " + item.ToString();
}
return View("Index");
}
ex.ToString():
System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information. at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module) at System.Reflection.RuntimeAssembly.get_DefinedTypes() at System.Composition.Hosting.ContainerConfiguration.<WithAssemblies>b__0(Assembly a) at System.Linq.Enumerable.<SelectManyIterator>d__14`2.MoveNext() at System.Composition.TypedParts.TypedPartExportDescriptorProvider..ctor(IEnumerable`1 types, AttributedModelProvider attributeContext) at System.Composition.Hosting.ContainerConfiguration.CreateContainer() at Microsoft.CodeAnalysis.Host.Mef.MefHostServices.Create(IEnumerable`1 assemblies) at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.CreateMefHostServices() at SourceBrowser.Generator.SolutionAnalayzer..ctor(String solutionPath) at SourceBrowser.Site.Repositories.UploadRepository.ProcessSolution(String solutionPath, String repoRootPath) at SourceBrowser.Site.Controllers.UploadController.Submit(String githubUrl)
ex.LoaderExceptions[0]:
System.MissingMethodException: Method not found: 'Boolean Microsoft.Build.Tasks.Hosting.IAnalyzerHostObject.SetAdditionalFiles(Microsoft.Build.Framework.ITaskItem[])'.
https://www.google.ca/search?q=Microsoft.Build.Tasks.Hosting.IAnalyzerHostObject.SetAdditionalFiles
Submitting https://github.com/DEVSENSE/Phalanger
This error can't be reproduced locally - it happens only on the web server.
An error occurred while processing your request.
at System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at SourceBrowser.Generator.SolutionAnalayzer..ctor(String solutionPath) at SourceBrowser.Site.Controllers.UploadController.Submit(String githubUrl) at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary
2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult
2.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d() at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass33.b__32(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.b__1c() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.b__1e(IAsyncResult asyncResult);
System.AggregateException: One or more errors occurred. ---> System.ArgumentException: Illegal characters in path. at System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional) at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths) at System.IO.Path.GetFullPath(String path) at Microsoft.CodeAnalysis.MSBuild.ProjectFile.GetOutputDirectory() at Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile.CSharpCompilerInputs..ctor(CSharpProjectFile projectFile) at Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile.d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1.ConfiguredTaskAwaiter.GetResult() at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.<LoadProjectAsync>d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.<GetOrLoadProjectAsync>d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable
1.ConfiguredTaskAwaiter.GetResult() at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.d__1.MoveNext() --- End of inner exception stack trace --- at System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at SourceBrowser.Generator.SolutionAnalayzer..ctor(String solutionPath) at SourceBrowser.Site.Controllers.UploadController.Submit(String githubUrl) at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary
2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult
2.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d() at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass33.b__32(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.b__1c() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.b__1e(IAsyncResult asyncResult) ---> (Inner Exception #0) System.ArgumentException: Illegal characters in path. at System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional) at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths) at System.IO.Path.GetFullPath(String path) at Microsoft.CodeAnalysis.MSBuild.ProjectFile.GetOutputDirectory() at Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile.CSharpCompilerInputs..ctor(CSharpProjectFile projectFile) at Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile.d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1.ConfiguredTaskAwaiter.GetResult() at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.<LoadProjectAsync>d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.<GetOrLoadProjectAsync>d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable
1.ConfiguredTaskAwaiter.GetResult() at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.d__1.MoveNext()<--- ;
We should just build the line numbers into the HTML instead of depending on a metadata file.
The supplementary information on user and repository is not required for operation of Source Browser. The exception should be swallowed.
For some reason the hierarchy seems to have gotten flattened. The top level should be /src
The tree view does not expand properly in http://sourcebrowser.io/Browse/aspnet/MusicStore/MvcMusicStore/Global.asax.cs because we're missing "src" in the path:
The .sln file is in a parent directory to the "src" directory: https://github.com/aspnet/MusicStore/ so I don't know off hand why we have this issue.
Currently search results show the name of the match and its fully qualified name (path).
The fully qualified name is illegible. To differentiate us from github (and github browsing extensions) we can display semantic information about search results, for example, whether something is a type, constructor, static method, regular method, etc.
When clicking on any document in the tree in Firefox there is a JavaScript error
TypeError: n.originalEvent.srcElement is undefined
Both myself and @AmadeusW have had issues debugging SourceBrowser in Visual Studio 2015. Occasionally, we won't be able to inspect variables and adding a watch displays the error message:
error CS1703: Multiple assemblies with equivalent identity have been imported: 'Microsoft.Build.Framework.dll' and 'Microsoft.Build.Framework.dll'. Remove one of the duplicate references.
Within Roslyn this message appear to be found here: http://source.roslyn.codeplex.com/#Microsoft.CodeAnalysis/ReferenceManager/CommonReferenceManager.Resolution.cs,628
I'm creating this issue to see if any other contributors notice this problem. If so, please report it here and we'll try to repro for the Roslyn team.
We should be able to programmatically update the models and regenerate output files for each repository submitted to Source Browser.
This will be used any time we update the website with new code. Currently after each push we need to manually re-upload the repositories.
We know what repositories have been uploaded to SourceBrowser - they are all located in SB_Files directory.
As mentioned in #14 we should probably make the workspace model elements immutable. After they've been created, we really don't need to be mutating them.
It seems that per Github user/organization only one repo can be uploaded: I uploaded NancyFx/Nancy and then NancyFx/Nancy.Serialization.JsonNet. Now http://sourcebrowser.io/Browse/NancyFx/Nancy contains NancyFx/Nancy.Serialization.JsonNet
The exception occurs at line
System.IO.Compression.ZipFile.ExtractToDirectory(baseRepositoryPath + zipName, absoluteRepositoryPath);
in SourceBrowser.SolutionRetriever.GitHubSolutionRetriever.RetrieveProject()
I don't know how to fix it. To begin with,
baseRepositoryPath is 99 characters, and that's counting double slashes and quotes.
zipName is 40 characters
absoluteRepositoryPath is 115 characters, again, with double slashes and quotes:
"C:\\Users\\Amadeus\\Documents\\GitHub\\SourceBrowser\\src\\SourceBrowser.Site\\\\GithubStaging\\"
"C:\\Users\\Amadeus\\Documents\\GitHub\\SourceBrowser\\src\\SourceBrowser.Site\\\\GithubStaging\\SignalR\\SignalR"
I tried two approaches, to no avail:
Shorten the zip's filename
string zipName = (guid + ".zip").Substring(24); // Try to avoid long path issues
Use the long path prefix
string baseRepositoryPath = "?" + System.Web.Hosting.HostingEnvironment.MapPath("~/") + "\GithubStaging";
But this was a cause of different kinds of exceptions.
More info: http://blog.codinghorror.com/filesystem-paths-how-long-is-too-long/
According to http://social.technet.microsoft.com/wiki/contents/articles/12179.net-powershell-path-too-long-exception-and-a-net-powershell-robocopy-clone.aspx we can't use it. This trick works with Windows APIs, but not with .NET framework
Any ideas?
Sometimes things go wrong and we need a good way to know what exactly happens.
The following links illustrate how we can get logging:
http://azure.microsoft.com/en-us/documentation/articles/web-sites-enable-diagnostic-log/
http://azure.microsoft.com/en-us/documentation/articles/cloud-services-dotnet-diagnostics/#virtual-machine
This is another way of getting more information (not necessarily logs) through Application Insights: http://msdn.microsoft.com/en-us/library/dn481100.aspx
As mentioned by Jason here, we need to properly sandbox our use of MSBuild when loading solutions. I'd rather not lose everything on the machine (or worse...).
Unfortunately, I'm not sure what the appropriate steps to take here are. I'm reading up on running partially trusted code in a sandbox, but I'm not sure if this is good enough: http://msdn.microsoft.com/en-us/library/bb763046%28v=vs.110%29.aspx
Work in progress at http://jsfiddle.net/appgpwv6/
The treeview and search results will reside in a side bar. Only one will be visible at a time.
Sidebar will have its own scroll bar, and the main content area will have its own scroll bar.
They're supposed to be temporary files that get removed after being processed, either successfully or not.
We should add support for VB .Net. We should get this for almost free using Roslyn.
The content of this repository seems to be a console application, while "the product" (http://sourcebrowser.io/) seems to be a web application. Seems you have to publish on Github too :)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.