Skip to content

Commit 1ed0368

Browse files
authored
Merge pull request #1 from MrLuje/moq
Moq support
2 parents cad0186 + d51f84f commit 1ed0368

17 files changed

+1153
-87
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,6 @@ FakesAssemblies/
243243
_Pvt_Extensions
244244

245245
# Paket dependency manager
246-
.paket/paket.exe
247246
paket-files/
248247

249248
# FAKE - F# Make

.paket/Paket.Restore.targets

Lines changed: 276 additions & 0 deletions
Large diffs are not rendered by default.

.paket/paket.exe

62.8 KB
Binary file not shown.

.paket/paket.targets

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
4+
<PropertyGroup>
5+
<!-- Enable the restore command to run before builds -->
6+
<RestorePackages Condition=" '$(RestorePackages)' == '' ">true</RestorePackages>
7+
<PaketToolsPath>$(MSBuildThisFileDirectory)</PaketToolsPath>
8+
<PaketRootPath>$(MSBuildThisFileDirectory)..\</PaketRootPath>
9+
<PaketLockFilePath>$(PaketRootPath)paket.lock</PaketLockFilePath>
10+
<PaketRestoreCacheFile>$(PaketRootPath)paket-files\paket.restore.cached</PaketRestoreCacheFile>
11+
<MonoPath Condition="'$(MonoPath)' == '' And Exists('/Library/Frameworks/Mono.framework/Commands/mono')">/Library/Frameworks/Mono.framework/Commands/mono</MonoPath>
12+
<MonoPath Condition="'$(MonoPath)' == ''">mono</MonoPath>
13+
</PropertyGroup>
14+
15+
<PropertyGroup>
16+
<!-- Paket command -->
17+
<PaketExePath Condition=" '$(PaketExePath)' == '' AND Exists('$(PaketRootPath)paket.exe')">$(PaketRootPath)paket.exe</PaketExePath>
18+
<PaketExePath Condition=" '$(PaketExePath)' == '' ">$(PaketToolsPath)paket.exe</PaketExePath>
19+
<PaketCommand Condition=" '$(OS)' == 'Windows_NT'">"$(PaketExePath)"</PaketCommand>
20+
<PaketCommand Condition=" '$(OS)' != 'Windows_NT' ">$(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)"</PaketCommand>
21+
</PropertyGroup>
22+
23+
<Choose> <!-- MyProject.fsproj.paket.references has the highest precedence -->
24+
<When Condition="Exists('$(MSBuildProjectFullPath).paket.references')">
25+
<PropertyGroup>
26+
<PaketReferences>$(MSBuildProjectFullPath).paket.references</PaketReferences>
27+
</PropertyGroup>
28+
</When> <!-- MyProject.paket.references -->
29+
<When Condition="Exists('$(MSBuildProjectDirectory)\$(MSBuildProjectName).paket.references')">
30+
<PropertyGroup>
31+
<PaketReferences>$(MSBuildProjectDirectory)\$(MSBuildProjectName).paket.references</PaketReferences>
32+
</PropertyGroup>
33+
</When> <!-- paket.references -->
34+
<When Condition="Exists('$(MSBuildProjectDirectory)\paket.references')">
35+
<PropertyGroup>
36+
<PaketReferences>$(MSBuildProjectDirectory)\paket.references</PaketReferences>
37+
</PropertyGroup>
38+
</When> <!-- Set to empty if a reference file isn't found matching one of the 3 format options -->
39+
<Otherwise>
40+
<PropertyGroup>
41+
<PaketReferences></PaketReferences>
42+
</PropertyGroup>
43+
</Otherwise>
44+
</Choose>
45+
46+
<PropertyGroup>
47+
<!-- Commands -->
48+
<RestoreCommand>$(PaketCommand) restore --references-file "$(PaketReferences)"</RestoreCommand>
49+
<!-- We need to ensure packages are restored prior to assembly resolve -->
50+
<BuildDependsOn Condition="$(RestorePackages) == 'true'">RestorePackages; $(BuildDependsOn);</BuildDependsOn>
51+
</PropertyGroup>
52+
<Target Name="RestorePackages">
53+
<PropertyGroup>
54+
<PaketRestoreRequired>true</PaketRestoreRequired>
55+
</PropertyGroup>
56+
57+
<PropertyGroup Condition="Exists('$(PaketRestoreCacheFile)') ">
58+
<PaketRestoreCachedHash>$([System.IO.File]::ReadAllText('$(PaketRestoreCacheFile)'))</PaketRestoreCachedHash>
59+
<PaketRestoreLockFileHash>$([System.IO.File]::ReadAllText('$(PaketLockFilePath)'))</PaketRestoreLockFileHash>
60+
<PaketRestoreRequired>true</PaketRestoreRequired>
61+
<PaketRestoreRequired Condition=" '$(PaketRestoreLockFileHash)' == '$(PaketRestoreCachedHash)' ">false</PaketRestoreRequired>
62+
<PaketRestoreRequired Condition=" '$(PaketRestoreLockFileHash)' == '' ">true</PaketRestoreRequired>
63+
</PropertyGroup>
64+
65+
<Exec Command="$(RestoreCommand)"
66+
IgnoreStandardErrorWarningFormat="true"
67+
WorkingDirectory="$(PaketRootPath)"
68+
ContinueOnError="false"
69+
Condition=" '$(PaketRestoreRequired)' == 'true' AND Exists('$(PaketReferences)') AND '$(PaketReferences)' != '' "
70+
/>
71+
</Target>
72+
</Project>

Mocking.Helpers.sln

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,16 @@ Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio 15
44
VisualStudioVersion = 15.0.27130.2027
55
MinimumVisualStudioVersion = 10.0.40219.1
6-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mocking.Helpers", "Mocking.Helpers\Mocking.Helpers\Mocking.Helpers.csproj", "{49B470A9-EFE4-4470-A1B3-154947BC7453}"
6+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mocking.Helpers", "Mocking.Helpers\Mocking.Helpers\Mocking.Helpers.csproj", "{49B470A9-EFE4-4470-A1B3-154947BC7453}"
77
EndProject
88
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mocking.Helpers.Vsix", "Mocking.Helpers\Mocking.Helpers.Vsix\Mocking.Helpers.Vsix.csproj", "{BB53B565-6B97-4B6E-806A-DD072023AE6F}"
99
EndProject
10+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".paket", ".paket", "{C7A83F62-91BD-4A9B-AF0D-DAE64BE55B4A}"
11+
ProjectSection(SolutionItems) = preProject
12+
paket.dependencies = paket.dependencies
13+
paket.lock = paket.lock
14+
EndProjectSection
15+
EndProject
1016
Global
1117
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1218
Debug|Any CPU = Debug|Any CPU

Mocking.Helpers/Mocking.Helpers.Vsix/Mocking.Helpers.Vsix.csproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,12 @@
9090
<Install>false</Install>
9191
</BootstrapperPackage>
9292
</ItemGroup>
93+
<ItemGroup>
94+
<Content Include="Resources\moq.png">
95+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
96+
<IncludeInVSIX>true</IncludeInVSIX>
97+
</Content>
98+
</ItemGroup>
9399
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
94100
<Import Project="$(VSToolsPath)\VSSDK\Microsoft.VsSDK.targets" Condition="'$(VSToolsPath)' != ''" />
95101
</Project>
26.9 KB
Loading
Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
3-
<Metadata>
4-
<Identity Id="Mocking.Helpers..9e3b8d25-be45-4b82-9e8d-eeceadcc1af3" Version="1.0" Language="en-US" Publisher="vince"/>
5-
<DisplayName>Mocking.Helpers</DisplayName>
6-
<Description xml:space="preserve">This is a sample code refactoring extension for the .NET Compiler Platform ("Roslyn").</Description>
7-
</Metadata>
8-
<Installation>
9-
<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[15.0,)" />
10-
</Installation>
11-
<Dependencies>
12-
<Dependency Id="Microsoft.Framework.NDP" DisplayName="Microsoft .NET Framework" d:Source="Manual" Version="[4.5,)" />
13-
</Dependencies>
14-
<Assets>
15-
<Asset Type="Microsoft.VisualStudio.MefComponent" d:Source="Project" d:ProjectName="Mocking.Helpers" Path="|Mocking.Helpers|"/>
16-
</Assets>
17-
<Prerequisites>
18-
<Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[15.0,16.0)" DisplayName="Visual Studio core editor" />
19-
<Prerequisite Id="Microsoft.VisualStudio.Component.Roslyn.LanguageServices" Version="[15.0,16.0)" DisplayName="Roslyn Language Services" />
20-
</Prerequisites>
3+
<Metadata>
4+
<Identity Id="Mocking.Helpers..9e3b8d25-be45-4b82-9e8d-eeceadcc1af3" Version="1.0.0.0" Language="en-US" Publisher="MrLuje"/>
5+
<DisplayName>Mocking.Helpers</DisplayName>
6+
<Description xml:space="preserve">Collection of features to help working with various mocking framework</Description>
7+
<MoreInfo>https://github.com/MrLuje/Mocking.Helpers</MoreInfo>
8+
<PreviewImage>Resources\moq.png</PreviewImage>
9+
<Tags>mocking roslyn moq</Tags>
10+
</Metadata>
11+
<Installation>
12+
<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[15.0,16.0)" />
13+
<InstallationTarget Version="[15.0,16.0)" Id="Microsoft.VisualStudio.Pro" />
14+
<InstallationTarget Version="[15.0,16.0)" Id="Microsoft.VisualStudio.Enterprise" />
15+
</Installation>
16+
<Dependencies>
17+
<Dependency Id="Microsoft.Framework.NDP" DisplayName="Microsoft .NET Framework" d:Source="Manual" Version="[4.5,)" />
18+
</Dependencies>
19+
<Assets>
20+
<Asset Type="Microsoft.VisualStudio.MefComponent" d:Source="Project" d:ProjectName="Mocking.Helpers" Path="|Mocking.Helpers|"/>
21+
</Assets>
22+
<Prerequisites>
23+
<Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[15.0,16.0)" DisplayName="Visual Studio core editor" />
24+
<Prerequisite Id="Microsoft.VisualStudio.Component.Roslyn.LanguageServices" Version="[15.0,16.0)" DisplayName="Roslyn Language Services" />
25+
</Prerequisites>
2126
</PackageManifest>
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
using Microsoft.CodeAnalysis;
2+
using Microsoft.CodeAnalysis.Completion;
3+
using Microsoft.CodeAnalysis.CSharp;
4+
using Microsoft.CodeAnalysis.CSharp.Syntax;
5+
using Mocking.Helpers.Moq;
6+
using System;
7+
using System.Linq;
8+
9+
namespace Mocking.Helpers
10+
{
11+
public class CompletionService
12+
{
13+
private CompletionContext _context;
14+
private CompletionItemRules _preselectCompletions;
15+
private CompletionItemRules _defaultCompletions;
16+
private readonly SyntaxToken _token;
17+
private readonly SemanticModel _semanticModel;
18+
private readonly MoqProvider _provider;
19+
20+
public CompletionService(CompletionContext context, SyntaxToken token, SemanticModel semanticModel, MoqProvider provider)
21+
{
22+
_context = context;
23+
_token = token;
24+
_semanticModel = semanticModel;
25+
26+
_preselectCompletions = CompletionItemRules.Default.WithMatchPriority(MatchPriority.Preselect).WithSelectionBehavior(CompletionItemSelectionBehavior.SoftSelection);
27+
_defaultCompletions = CompletionItemRules.Default.WithSelectionBehavior(CompletionItemSelectionBehavior.SoftSelection);
28+
_provider = provider;
29+
}
30+
31+
public void AddSuggestionsForMethod(IMethodSymbol methodSymbol, ArgumentListSyntax arguments)
32+
{
33+
switch (this._token.Kind())
34+
{
35+
// Starting parenthesis before parameters
36+
case SyntaxKind.OpenParenToken:
37+
AddSuggestionsForAllParameters(methodSymbol, arguments);
38+
break;
39+
// Somewhere after first parameter
40+
default:
41+
AddSuggestionsForNextParameters(methodSymbol, arguments);
42+
break;
43+
}
44+
}
45+
46+
private void AddSuggestionsForAllParameters(IMethodSymbol methodSymbol, ArgumentListSyntax arguments)
47+
{
48+
// Suggestion for all parameters
49+
this.AddSuggestion(this._provider.GenerateSuggestionForParameterWildcard(this._semanticModel, methodSymbol, arguments));
50+
51+
// Highlight suggestion of first parameter
52+
if (methodSymbol.Parameters.Length > 1)
53+
{
54+
this.AddDefaultSuggestion(this._provider.GenerateSuggestionForParameterWildcardOfType(_semanticModel, methodSymbol.Parameters[0].Type, arguments));
55+
}
56+
}
57+
58+
private void AddSuggestionsForNextParameters(IMethodSymbol methodSymbol, ArgumentListSyntax arguments)
59+
{
60+
var currentParamIndex = arguments.ChildTokens()
61+
.Where(t => t.IsKind(SyntaxKind.CommaToken))
62+
.ToList()
63+
.IndexOf(this._token);
64+
var nextParamIndex = currentParamIndex + 1;
65+
66+
if (methodSymbol.Parameters.Length <= nextParamIndex) return;
67+
68+
this.AddDefaultSuggestion(this._provider.GenerateSuggestionForParameterWildcardOfType(_semanticModel, methodSymbol.Parameters[nextParamIndex].Type, arguments));
69+
}
70+
71+
void AddSuggestion(string suggestion)
72+
{
73+
this._context.AddItem(CompletionItem.Create(suggestion, rules: _preselectCompletions));
74+
}
75+
76+
void AddDefaultSuggestion(string suggestion)
77+
{
78+
this._context.AddItem(CompletionItem.Create(suggestion, rules: _defaultCompletions));
79+
}
80+
}
81+
}
Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1+
<?xml version="1.0" encoding="utf-8"?>
12
<Project Sdk="Microsoft.NET.Sdk">
2-
33
<PropertyGroup>
4-
<TargetFramework>netstandard1.3</TargetFramework>
4+
<TargetFramework>netstandard2.0</TargetFramework>
55
</PropertyGroup>
6-
76
<ItemGroup>
8-
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="2.4.0" PrivateAssets="all" />
97
<PackageReference Update="NETStandard.Library" PrivateAssets="all" />
108
</ItemGroup>
11-
12-
</Project>
9+
<Import Project="..\..\.paket\Paket.Restore.targets" />
10+
</Project>

0 commit comments

Comments
 (0)