Browse Source

fix #255: Code Completion description tooltip is unformatted

pull/315/head
Siegfried Pammer 12 years ago
parent
commit
6c2e11af2c
  1. 14
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CompletionData.cs
  2. 6
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/EntityCompletionData.cs
  3. 6
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/TypeCompletionData.cs
  4. 2
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj
  5. 1
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopTextEditor.cs
  6. 38
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/XmlDoc/XmlDocTooltipProvider.cs
  7. 4
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj
  8. 3
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/DocumentPrinter.cs
  9. 10
      src/Main/Base/Project/Editor/DocumentationUIBuilder.cs
  10. 60
      src/Main/Base/Project/Editor/XmlDocFormatter.cs
  11. 8
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

14
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CompletionData.cs

@ -76,8 +76,20 @@ namespace CSharpBinding.Completion @@ -76,8 +76,20 @@ namespace CSharpBinding.Completion
get { return this.DisplayText; }
}
object fancyDescription;
object IFancyCompletionItem.Description {
get { return this.Description; }
get {
if (fancyDescription == null) {
fancyDescription = CreateFancyDescription();
}
return fancyDescription;
}
}
protected virtual object CreateFancyDescription()
{
return null;
}
}
}

6
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/EntityCompletionData.cs

@ -6,6 +6,7 @@ using System.Collections.Generic; @@ -6,6 +6,7 @@ using System.Collections.Generic;
using ICSharpCode.NRefactory.Completion;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
namespace CSharpBinding.Completion
{
@ -23,5 +24,10 @@ namespace CSharpBinding.Completion @@ -23,5 +24,10 @@ namespace CSharpBinding.Completion
this.Description = entity.Documentation;
this.Image = ClassBrowserIconService.GetIcon(entity);
}
protected override object CreateFancyDescription()
{
return XmlDocFormatter.CreateTooltip(entity);
}
}
}

6
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/TypeCompletionData.cs

@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
using System;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
namespace CSharpBinding.Completion
{
@ -23,5 +24,10 @@ namespace CSharpBinding.Completion @@ -23,5 +24,10 @@ namespace CSharpBinding.Completion
this.Description = typeDef.Documentation;
this.Image = ClassBrowserIconService.GetIcon(type);
}
protected override object CreateFancyDescription()
{
return XmlDocFormatter.CreateTooltip(type);
}
}
}

2
src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj

@ -118,7 +118,6 @@ @@ -118,7 +118,6 @@
<Compile Include="Src\SyntaxHighlighting\SyntaxModeDoozer.cs" />
<Compile Include="Src\TextMarkerToolTipProvider.cs" />
<Compile Include="Src\Utils.cs" />
<Compile Include="Src\XmlDoc\DocumentationUIBuilder.cs" />
<Compile Include="Src\XmlDoc\XmlDocTooltipProvider.cs" />
<None Include="AvalonEdit.AddIn.addin">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
@ -156,7 +155,6 @@ @@ -156,7 +155,6 @@
<Compile Include="Src\Commands\SurroundWithCommand.cs" />
<Compile Include="Src\CustomCommands.cs" />
<Compile Include="Src\CustomizedHighlightingColor.cs" />
<Compile Include="Src\DocumentPrinter.cs" />
<Compile Include="Src\InlineUIElementGenerator.cs" />
<Compile Include="Src\IconBarManager.cs" />
<Compile Include="Src\IconBarMargin.cs" />

1
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopTextEditor.cs

@ -17,6 +17,7 @@ using System.Windows.Input; @@ -17,6 +17,7 @@ using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Threading;
using ICSharpCode.AvalonEdit.Utils;
using ICSharpCode.AvalonEdit.AddIn.Options;
using ICSharpCode.AvalonEdit.AddIn.Snippets;
using ICSharpCode.AvalonEdit.Editing;

38
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/XmlDoc/XmlDocTooltipProvider.cs

@ -70,46 +70,12 @@ namespace ICSharpCode.AvalonEdit.AddIn.XmlDoc @@ -70,46 +70,12 @@ namespace ICSharpCode.AvalonEdit.AddIn.XmlDoc
object CreateTooltip(IType type)
{
var ambience = AmbienceService.GetCurrentAmbience();
ambience.ConversionFlags = ConversionFlags.StandardConversionFlags | ConversionFlags.ShowDeclaringType | ConversionFlags.UseFullyQualifiedTypeNames;
string header;
if (type is ITypeDefinition)
header = ambience.ConvertEntity((ITypeDefinition)type);
else
header = ambience.ConvertType(type);
ambience.ConversionFlags = ConversionFlags.ShowTypeParameterList;
DocumentationUIBuilder b = new DocumentationUIBuilder(ambience);
b.AddCodeBlock(header, keepLargeMargin: true);
ITypeDefinition entity = type.GetDefinition();
if (entity != null) {
var documentation = XmlDocumentationElement.Get(entity);
if (documentation != null) {
foreach (var child in documentation.Children) {
b.AddDocumentationElement(child);
}
}
}
return new FlowDocumentTooltip(b.CreateFlowDocument());
return new FlowDocumentTooltip(XmlDocFormatter.CreateTooltip(type));
}
object CreateTooltip(IEntity entity)
{
var ambience = AmbienceService.GetCurrentAmbience();
ambience.ConversionFlags = ConversionFlags.StandardConversionFlags | ConversionFlags.ShowDeclaringType | ConversionFlags.UseFullyQualifiedTypeNames;
string header = ambience.ConvertEntity(entity);
var documentation = XmlDocumentationElement.Get(entity);
ambience.ConversionFlags = ConversionFlags.ShowTypeParameterList;
DocumentationUIBuilder b = new DocumentationUIBuilder(ambience);
b.AddCodeBlock(header, keepLargeMargin: true);
if (documentation != null) {
foreach (var child in documentation.Children) {
b.AddDocumentationElement(child);
}
}
return new FlowDocumentTooltip(b.CreateFlowDocument());
return new FlowDocumentTooltip(XmlDocFormatter.CreateTooltip(entity));
}
}
}

4
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/ICSharpCode.AvalonEdit.csproj

@ -64,6 +64,9 @@ @@ -64,6 +64,9 @@
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Drawing" />
<Reference Include="System.Printing">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
@ -356,6 +359,7 @@ @@ -356,6 +359,7 @@
<Compile Include="Utils\Constants.cs" />
<Compile Include="Utils\DelayedEvents.cs" />
<Compile Include="Utils\Deque.cs" />
<Compile Include="Utils\DocumentPrinter.cs" />
<Compile Include="Utils\Empty.cs" />
<Compile Include="Utils\ExtensionMethods.cs" />
<Compile Include="Utils\FileReader.cs" />

3
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/DocumentPrinter.cs → src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/DocumentPrinter.cs

@ -9,13 +9,12 @@ using System.Windows; @@ -9,13 +9,12 @@ using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Xps;
using System.Windows.Xps.Packaging;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.NRefactory.Editor;
namespace ICSharpCode.AvalonEdit.AddIn
namespace ICSharpCode.AvalonEdit.Utils
{
/// <summary>
/// Helps printing documents.

10
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/XmlDoc/DocumentationUIBuilder.cs → src/Main/Base/Project/Editor/DocumentationUIBuilder.cs

@ -3,20 +3,18 @@ @@ -3,20 +3,18 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Documents;
using System.Windows.Media;
using ICSharpCode.AvalonEdit.AddIn.Options;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Utils;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.Xml;
using ICSharpCode.SharpDevelop;
namespace ICSharpCode.AvalonEdit.AddIn.XmlDoc
namespace ICSharpCode.SharpDevelop.Editor
{
/// <summary>
/// Builds a FlowDocument for XML documentation.
@ -247,7 +245,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.XmlDoc @@ -247,7 +245,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.XmlDoc
FontFamily GetCodeFont()
{
return new FontFamily(CodeEditorOptions.Instance.FontFamily);
return new FontFamily(SD.EditorControlService.GlobalOptions.FontFamily);
}
void AddException(IEntity referencedEntity, IList<XmlDocumentationElement> children)
@ -489,3 +487,5 @@ namespace ICSharpCode.AvalonEdit.AddIn.XmlDoc @@ -489,3 +487,5 @@ namespace ICSharpCode.AvalonEdit.AddIn.XmlDoc
}
}
}

60
src/Main/Base/Project/Editor/XmlDocFormatter.cs

@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
// 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.Windows.Documents;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.Xml;
namespace ICSharpCode.SharpDevelop.Editor
{
/// <summary>
/// Provides helper methods to create nicely formatted FlowDocuments from NRefactory XmlDoc.
/// </summary>
public static class XmlDocFormatter
{
public static FlowDocument CreateTooltip(IType type)
{
var ambience = AmbienceService.GetCurrentAmbience();
ambience.ConversionFlags = ConversionFlags.StandardConversionFlags | ConversionFlags.ShowDeclaringType | ConversionFlags.UseFullyQualifiedTypeNames;
string header;
if (type is ITypeDefinition)
header = ambience.ConvertEntity((ITypeDefinition)type);
else
header = ambience.ConvertType(type);
ambience.ConversionFlags = ConversionFlags.ShowTypeParameterList;
DocumentationUIBuilder b = new DocumentationUIBuilder(ambience);
b.AddCodeBlock(header, keepLargeMargin: true);
ITypeDefinition entity = type.GetDefinition();
if (entity != null) {
var documentation = XmlDocumentationElement.Get(entity);
if (documentation != null) {
foreach (var child in documentation.Children) {
b.AddDocumentationElement(child);
}
}
}
return b.CreateFlowDocument();
}
public static FlowDocument CreateTooltip(IEntity entity)
{
var ambience = AmbienceService.GetCurrentAmbience();
ambience.ConversionFlags = ConversionFlags.StandardConversionFlags | ConversionFlags.ShowDeclaringType | ConversionFlags.UseFullyQualifiedTypeNames;
string header = ambience.ConvertEntity(entity);
var documentation = XmlDocumentationElement.Get(entity);
ambience.ConversionFlags = ConversionFlags.ShowTypeParameterList;
DocumentationUIBuilder b = new DocumentationUIBuilder(ambience);
b.AddCodeBlock(header, keepLargeMargin: true);
if (documentation != null) {
foreach (var child in documentation.Children) {
b.AddDocumentationElement(child);
}
}
return b.CreateFlowDocument();
}
}
}

8
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -141,6 +141,7 @@ @@ -141,6 +141,7 @@
<Compile Include="Editor\CodeCompletion\SnippetCompletionData.cs" />
<Compile Include="Editor\ContextActions\ContextActionsPopupViewModel.cs" />
<Compile Include="Editor\ContextActions\ContextActionViewModel.cs" />
<Compile Include="Editor\DocumentationUIBuilder.cs" />
<Compile Include="Editor\DocumentServiceAttribute.cs" />
<Compile Include="Editor\DocumentUtilities.cs" />
<Compile Include="Editor\IBracketSearcher.cs" />
@ -166,6 +167,7 @@ @@ -166,6 +167,7 @@
<DependentUpon>ToolTipService.cs</DependentUpon>
</Compile>
<Compile Include="Editor\ToolTipService.cs" />
<Compile Include="Editor\XmlDocFormatter.cs" />
<Compile Include="Parser\CombinedAssemblySearcher.cs" />
<Compile Include="Parser\DefaultAssemblySearcher.cs" />
<Compile Include="Parser\DomAssemblyName.cs" />
@ -896,6 +898,12 @@ @@ -896,6 +898,12 @@
<ProjectReference Include="..\..\..\Libraries\NRefactory\ICSharpCode.NRefactory.Cecil\ICSharpCode.NRefactory.Cecil.csproj">
<Project>{B2BBC7BC-837C-40ED-A6DB-D5AE8626212F}</Project>
<Name>ICSharpCode.NRefactory.Cecil</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\Libraries\NRefactory\ICSharpCode.NRefactory.Xml\ICSharpCode.NRefactory.Xml.csproj">
<Project>{DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6}</Project>
<Name>ICSharpCode.NRefactory.Xml</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\Libraries\NRefactory\ICSharpCode.NRefactory\ICSharpCode.NRefactory.csproj">
<Project>{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}</Project>

Loading…
Cancel
Save