Skip to content

Commit 79e8d6e

Browse files
committed
Merge pull request scriptcs#1109 from glennblock/openide
Openide
2 parents d4d8e02 + d6d70fa commit 79e8d6e

18 files changed

Lines changed: 697 additions & 1 deletion

src/ScriptCs.Contracts/IFileSystem.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ IEnumerable<string> EnumerateFilesAndDirectories(
3535

3636
string GetFullPath(string path);
3737

38+
string TempPath { get; }
39+
3840
string CurrentDirectory { get; set; }
3941

4042
string NewLine { get; }
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System;
2+
3+
namespace ScriptCs.Contracts
4+
{
5+
public class ProjectItem
6+
{
7+
public ProjectItem(Guid project, Guid parent)
8+
{
9+
Project = project;
10+
Parent = parent;
11+
}
12+
13+
public Guid Parent { get; private set; }
14+
public Guid Project { get; private set; }
15+
}
16+
}

src/ScriptCs.Contracts/ScriptCs.Contracts.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@
105105
<Compile Include="LogLevel.cs" />
106106
<Compile Include="LogProviderExtensions.cs" />
107107
<Compile Include="ModuleAttribute.cs" />
108+
<Compile Include="ProjectItem.cs" />
108109
<Compile Include="Properties\AssemblyInfo.cs" />
109110
<Compile Include="ScriptPack.cs" />
110111
<Compile Include="ScriptPackSession.cs" />

src/ScriptCs.Core/FileSystem.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,15 @@ public virtual string GetFullPath(string path)
181181
return Path.GetFullPath(path);
182182
}
183183

184+
185+
public virtual string TempPath
186+
{
187+
get
188+
{
189+
return Path.GetTempPath();
190+
}
191+
}
192+
184193
public virtual string HostBin
185194
{
186195
get { return AppDomain.CurrentDomain.BaseDirectory; }
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace ScriptCs.Hosting
8+
{
9+
public class DirectoryInfo
10+
{
11+
public DirectoryInfo()
12+
{
13+
Guid = Guid.NewGuid();
14+
Files = new List<string>();
15+
Directories = new Dictionary<string, DirectoryInfo>();
16+
}
17+
18+
public Guid Guid { get; private set; }
19+
public string Name { get; set; }
20+
public string Path { get; set; }
21+
public string FullPath { get; set; }
22+
public List<string> Files { get; private set; }
23+
public Dictionary<string, DirectoryInfo> Directories { get; private set; }
24+
}
25+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System;
2+
using System.Collections.Generic;
3+
4+
namespace ScriptCs.Contracts
5+
{
6+
public interface IVisualStudioSolution
7+
{
8+
void AddHeader();
9+
void AddScriptcsProject(string scriptcsPath, string workingPath, string args, bool attach, Guid projectGuid);
10+
void AddProject(string path, string name, Guid guid, string[] files);
11+
void AddGlobalHeader(Guid projectGuid);
12+
void AddGlobalNestedProjects(IList<ProjectItem> nestedItems);
13+
void AddGlobal(Guid projectGuid, IList<ProjectItem> nestedItems);
14+
}
15+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using ScriptCs.Contracts;
4+
5+
namespace ScriptCs.Contracts
6+
{
7+
public interface IVisualStudioSolutionWriter
8+
{
9+
string WriteSolution(IFileSystem fs, string script, IVisualStudioSolution solution, IList<ProjectItem> nestedItems = null);
10+
}
11+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using ScriptCs.Contracts;
8+
9+
namespace ScriptCs.Hosting.ReplCommands
10+
{
11+
public class OpenVsCommand : IReplCommand
12+
{
13+
private readonly IConsole _console;
14+
private IVisualStudioSolutionWriter _writer;
15+
16+
public OpenVsCommand(IConsole console, IVisualStudioSolutionWriter writer)
17+
{
18+
_console = console;
19+
_writer = writer;
20+
}
21+
22+
public object Execute(IRepl repl, object[] args)
23+
{
24+
if (PlatformID != PlatformID.Win32NT)
25+
{
26+
_console.WriteLine("Requires Windows 8 or later to run");
27+
return null;
28+
}
29+
var fs = repl.FileSystem;
30+
var launcher = _writer.WriteSolution(fs, (string) args[0], new VisualStudioSolution());
31+
_console.WriteLine("Opening Visual Studio");
32+
LaunchSolution(launcher);
33+
return null;
34+
}
35+
36+
protected internal virtual void LaunchSolution(string launcher)
37+
{
38+
System.Diagnostics.Process.Start(launcher);
39+
}
40+
41+
protected internal virtual PlatformID PlatformID
42+
{
43+
get { return Environment.OSVersion.Platform; }
44+
}
45+
46+
public string Description
47+
{
48+
get { return "Opens a script to edit/debug in Visual Studio"; }
49+
}
50+
51+
public string CommandName
52+
{
53+
get { return "openvs"; }
54+
}
55+
}
56+
}

src/ScriptCs.Hosting/RuntimeServices.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,9 @@ protected override IContainer CreateContainer()
134134
RegisterOverrideOrDefault<IScriptLibraryComposer>(
135135
builder, b => b.RegisterType<ScriptLibraryComposer>().As<IScriptLibraryComposer>().SingleInstance());
136136

137+
RegisterOverrideOrDefault<IVisualStudioSolutionWriter>(
138+
builder, b => b.RegisterType<VisualStudioSolutionWriter>().As<IVisualStudioSolutionWriter>().SingleInstance());
139+
137140
if (_initDirectoryCatalog)
138141
{
139142
var fileSystem = _initializationServices.GetFileSystem();

src/ScriptCs.Hosting/ScriptCs.Hosting.csproj

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
<Reference Include="Common.Logging, Version=2.1.2.0, Culture=neutral, PublicKeyToken=af08829b84f0328e, processorArchitecture=MSIL">
6363
<HintPath>..\..\packages\Common.Logging.2.1.2\lib\net40\Common.Logging.dll</HintPath>
6464
<Private>True</Private>
65-
</Reference>
65+
</Reference>
6666
</ItemGroup>
6767
<ItemGroup>
6868
<Compile Include="..\..\common\CommonAssemblyInfo.cs">
@@ -75,13 +75,16 @@
7575
<Link>Guard.cs</Link>
7676
</Compile>
7777
<Compile Include="ColoredConsoleLogProvider.cs" />
78+
<Compile Include="DirectoryInfo.cs" />
7879
<Compile Include="ITypeResolver.cs" />
7980
<Compile Include="FileConsole.cs" />
8081
<Compile Include="IInitializationServices.cs" />
8182
<Compile Include="IModuleLoader.cs" />
8283
<Compile Include="InitializationServices.cs" />
8384
<Compile Include="IRuntimeServices.cs" />
8485
<Compile Include="IScriptServicesBuilder.cs" />
86+
<Compile Include="IVisualStudioSolution.cs" />
87+
<Compile Include="IVisualStudioSolutionWriter.cs" />
8588
<Compile Include="LoggerConfigurator.cs" />
8689
<Compile Include="ModuleConfiguration.cs" />
8790
<Compile Include="ModuleLoader.cs" />
@@ -91,6 +94,7 @@
9194
<Compile Include="Package\PackageInstaller.cs" />
9295
<Compile Include="Package\PackageObject.cs" />
9396
<Compile Include="Properties\AssemblyInfo.cs" />
97+
<Compile Include="ReplCommands\OpenVSCommand.cs" />
9498
<Compile Include="RuntimeServices.cs" />
9599
<Compile Include="ScriptConsole.cs" />
96100
<Compile Include="ScriptConsoleLogger.cs" />
@@ -100,6 +104,8 @@
100104
<Compile Include="ObjectSerializer.cs" />
101105
<Compile Include="TypeResolver.cs" />
102106
<Compile Include="LineEditor.cs" />
107+
<Compile Include="VisualStudioSolution.cs" />
108+
<Compile Include="VisualStudioSolutionWriter.cs" />
103109
</ItemGroup>
104110
<ItemGroup>
105111
<None Include="app.config" />

0 commit comments

Comments
 (0)