Browse Source

Add simple dot completion for C# Razor files.

Support very basic dot completion for T4MVC code inside a C# Razor file.
pull/28/head
Matt Ward 13 years ago
parent
commit
4aef0a2189
  1. 12
      src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin
  2. 5
      src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj
  3. 30
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Completion/RazorCSharpCompletionBinding.cs
  4. 23
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Completion/RazorCSharpDotCompletionDataProvider.cs
  5. 43
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Completion/RazorCSharpExpressionFinder.cs
  6. 50
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Completion/RazorCSharpParser.cs
  7. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/FoldGenerator.cs

12
src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.addin

@ -124,4 +124,16 @@ @@ -124,4 +124,16 @@
class="ICSharpCode.AspNet.Mvc.WebProjectOptionsPanel"/>
</ComplexCondition>
</Path>
<Path name = "/AddIns/DefaultTextEditor/CodeCompletion">
<CodeCompletionBinding id = "RazorCSharp" extensions = ".cshtml" class = "ICSharpCode.AspNet.Mvc.Completion.RazorCSharpCompletionBinding"/>
</Path>
<Path name = "/Workspace/Parser">
<Parser
id = "RazorCSharp"
supportedextensions = ".cshtml"
projectfileextension = ".csproj"
class = "ICSharpCode.AspNet.Mvc.Completion.RazorCSharpParser"/>
</Path>
</AddIn>

5
src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj

@ -122,6 +122,10 @@ @@ -122,6 +122,10 @@
<Compile Include="Src\AddMvcViewToProjectViewModel.cs" />
<Compile Include="Src\BooleanToVisibilityConverter.cs" />
<Compile Include="Src\CloseDialogBehaviour.cs" />
<Compile Include="Src\Completion\RazorCSharpCompletionBinding.cs" />
<Compile Include="Src\Completion\RazorCSharpDotCompletionDataProvider.cs" />
<Compile Include="Src\Completion\RazorCSharpExpressionFinder.cs" />
<Compile Include="Src\Completion\RazorCSharpParser.cs" />
<Compile Include="Src\CurrentAppDomain.cs" />
<Compile Include="Src\CurrentAppDomainFactory.cs" />
<Compile Include="Src\DelegateCommand.cs" />
@ -257,6 +261,7 @@ @@ -257,6 +261,7 @@
<Folder Include="ItemTemplates\VisualBasic\CodeTemplates\AddView\VBHTML" />
<Folder Include="Resources" />
<Folder Include="Src\Folding" />
<Folder Include="Src\Completion" />
<Folder Include="Src\WebProjectOptions" />
</ItemGroup>
<ItemGroup>

30
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Completion/RazorCSharpCompletionBinding.cs

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
namespace ICSharpCode.AspNet.Mvc.Completion
{
public class RazorCSharpCompletionBinding : ICodeCompletionBinding
{
public RazorCSharpCompletionBinding()
{
}
public CodeCompletionKeyPressResult HandleKeyPress(ITextEditor editor, char ch)
{
if (ch == '.') {
new RazorCSharpDotCompletionDataProvider().ShowCompletion(editor);
return CodeCompletionKeyPressResult.Completed;
}
return CodeCompletionKeyPressResult.None;
}
public bool CtrlSpace(ITextEditor editor)
{
return false;
}
}
}

23
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Completion/RazorCSharpDotCompletionDataProvider.cs

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
namespace ICSharpCode.AspNet.Mvc.Completion
{
public class RazorCSharpDotCompletionDataProvider : DotCodeCompletionItemProvider
{
public override ResolveResult Resolve(ITextEditor editor, ExpressionResult expressionResult)
{
ParseInformation parseInfo = ParserService.GetParseInformation(editor.FileName);
NRefactoryResolver resolver = new NRefactoryResolver(LanguageProperties.CSharp);
resolver.LimitMethodExtractionUntilLine = editor.Caret.Line;
return resolver.Resolve(expressionResult, parseInfo, editor.Document.Text);
}
}
}

43
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Completion/RazorCSharpExpressionFinder.cs

@ -0,0 +1,43 @@ @@ -0,0 +1,43 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.AspNet.Mvc.Completion
{
public class RazorCSharpExpressionFinder : IExpressionFinder
{
public RazorCSharpExpressionFinder()
{
}
public ExpressionResult FindExpression(string text, int offset)
{
int position = offset - 1;
while (position > 0 && IsValidCharacter(text[position])) {
position--;
}
position++;
string expression = text.Substring(position, offset - position);
return new ExpressionResult(expression);
}
bool IsValidCharacter(char ch)
{
return Char.IsLetterOrDigit(ch) ||
(ch == '.') ||
(ch == '_');
}
public ExpressionResult FindFullExpression(string text, int offset)
{
return ExpressionResult.Empty;
}
public string RemoveLastPart(string expression)
{
return expression;
}
}
}

50
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Completion/RazorCSharpParser.cs

@ -0,0 +1,50 @@ @@ -0,0 +1,50 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.IO;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.CSharp;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.AspNet.Mvc.Completion
{
public class RazorCSharpParser : IParser
{
public RazorCSharpParser()
{
}
public string[] LexerTags { get; set; }
public LanguageProperties Language {
get { return LanguageProperties.CSharp; }
}
public IExpressionFinder CreateExpressionFinder(string fileName)
{
return new RazorCSharpExpressionFinder();
}
public bool CanParse(string fileName)
{
return Path.GetExtension(fileName).Equals(".cshtml", StringComparison.OrdinalIgnoreCase);
}
public bool CanParse(IProject project)
{
return project.Language == "C#";
}
public ICompilationUnit Parse(IProjectContent projectContent, string fileName, ITextBuffer fileContent)
{
return new DefaultCompilationUnit(projectContent);
}
public IResolver CreateResolver()
{
return null;
}
}
}

2
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/Folding/FoldGenerator.cs

@ -30,8 +30,8 @@ namespace ICSharpCode.AspNet.Mvc.Folding @@ -30,8 +30,8 @@ namespace ICSharpCode.AspNet.Mvc.Folding
public void Dispose()
{
IsParseInformationFoldingEnabled = true;
textEditor.Dispose();
IsParseInformationFoldingEnabled = true;
}
public void GenerateFolds()

Loading…
Cancel
Save