Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/main/src
diff options
context:
space:
mode:
authorMike Krüger <mkrueger@xamarin.com>2018-02-23 14:32:42 +0300
committerGitHub <noreply@github.com>2018-02-23 14:32:42 +0300
commit585ff30adb47745c120ab3980ca8a373bcfbf2b2 (patch)
tree39b6244de24d15405be4ce6f7fe23d2fca0db91e /main/src
parent21178cdd45b363a3c726f795f2d4687bdf477aee (diff)
parent2c2bb96ef6c5b628f15a087ac7d98ad04df7fa70 (diff)
Merge pull request #3939 from mono/master-fix569951
Fixed VSTS 569951: Method description is not displayed for code
Diffstat (limited to 'main/src')
-rw-r--r--main/src/addins/CSharpBinding/MonoDevelop.CSharp.Completion/CompletionProvider/ProtocolMemberCompletionProvider.cs67
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeCompletion/RoslynCompletionData.cs7
2 files changed, 68 insertions, 6 deletions
diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Completion/CompletionProvider/ProtocolMemberCompletionProvider.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Completion/CompletionProvider/ProtocolMemberCompletionProvider.cs
index 3907ae0484..c54a3274d7 100644
--- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Completion/CompletionProvider/ProtocolMemberCompletionProvider.cs
+++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Completion/CompletionProvider/ProtocolMemberCompletionProvider.cs
@@ -37,15 +37,18 @@ using Microsoft.CodeAnalysis.CSharp.Extensions;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Shared.Extensions;
using Microsoft.CodeAnalysis.Text;
+using Microsoft.CodeAnalysis.LanguageServices;
using MonoDevelop.Core;
using MonoDevelop.CSharp.Refactoring;
using MonoDevelop.Ide;
using MonoDevelop.Ide.TypeSystem;
+using System.Text;
+using Microsoft.CodeAnalysis.DocumentationComments;
namespace MonoDevelop.CSharp.Completion.Provider
{
[ExportCompletionProvider ("ProtocolMemberCompletionProvider", LanguageNames.CSharp)]
- class ProtocolMemberCompletionProvider : CommonCompletionProvider
+ class ProtocolMemberCompletionProvider : CompletionProvider
{
public override async Task ProvideCompletionsAsync (Microsoft.CodeAnalysis.Completion.CompletionContext context)
{
@@ -111,7 +114,7 @@ namespace MonoDevelop.CSharp.Completion.Provider
}
- protected void CreateCompletionData (CompletionContext context, SemanticModel semanticModel, int position, ITypeSymbol returnType, Accessibility seenAccessibility, SyntaxToken startToken, SyntaxToken tokenBeforeReturnType, bool afterKeyword, CancellationToken cancellationToken)
+ protected async void CreateCompletionData (CompletionContext context, SemanticModel semanticModel, int position, ITypeSymbol returnType, Accessibility seenAccessibility, SyntaxToken startToken, SyntaxToken tokenBeforeReturnType, bool afterKeyword, CancellationToken cancellationToken)
{
if (!TryDetermineOverridableProtocolMembers (semanticModel, tokenBeforeReturnType, seenAccessibility, out ISet<ISymbol> overridableMembers, cancellationToken)) {
return;
@@ -144,18 +147,72 @@ namespace MonoDevelop.CSharp.Completion.Provider
var lastRegion = result.BodyRegions.LastOrDefault ();
var region = lastRegion == null ? null
: new CodeGeneratorBodyRegion (lastRegion.StartOffset - trimStart, lastRegion.EndOffset - trimStart);
-
+
pDict = pDict.Add ("InsertionText", sb.ToString ());
- pDict = pDict.Add ("DescriptionMarkup", "- <span foreground=\"darkgray\" size='small'>" + GettextCatalog.GetString("Implement protocol member") + "</span>");
+ pDict = pDict.Add ("DescriptionMarkup", "- <span foreground=\"darkgray\" size='small'>" + GettextCatalog.GetString ("Implement protocol member") + "</span>");
+ pDict = pDict.Add ("Description", await GenerateQuickInfo (semanticModel, position, m, cancellationToken));
+
var tags = ImmutableArray<string>.Empty.Add ("NewMethod");
var completionData = CompletionItem.Create (m.Name, properties: pDict, rules: ProtocolCompletionRules, tags: tags);
context.AddItem (completionData);
}
}
+ static async Task<string> GenerateQuickInfo (SemanticModel semanticModel, int position, ISymbol m, CancellationToken cancellationToken)
+ {
+ var ws = IdeApp.Workbench.ActiveDocument.RoslynWorkspace;
+
+ var displayService = ws.Services.GetLanguageServices (LanguageNames.CSharp).GetService<ISymbolDisplayService> ();
+
+ var sections = await displayService.ToDescriptionGroupsAsync (ws, semanticModel, position, new [] { m }.AsImmutable (), default (CancellationToken)).ConfigureAwait (false);
+ ImmutableArray<TaggedText> parts;
+
+ var description = new StringBuilder ();
+ description.Append ("Text|");
+ description.AppendLine (GettextCatalog.GetString ("Creates an implementation for:"));
+ description.AppendLine ();
+ foreach (var sect in sections) {
+ if (sections.TryGetValue (SymbolDescriptionGroups.MainDescription, out parts)) {
+ foreach (var part in parts) {
+ description.Append ("|");
+ description.Append (part.Tag);
+ description.Append ("|");
+ description.Append (part.Text);
+ }
+ }
+ }
+ var formatter = ws.Services.GetLanguageServices (LanguageNames.CSharp).GetService<IDocumentationCommentFormattingService> ();
+
+ var documentation = m.GetDocumentationParts (semanticModel, position, formatter, cancellationToken);
+
+ if (documentation != null && documentation.Any ()) {
+ description.Append ("|LineBreak|\n|LineBreak|\n");
+
+ foreach (var part in documentation) {
+ description.Append ("|");
+ description.Append (part.Tag);
+ description.Append ("|");
+ description.Append (part.Text);
+ }
+ }
+ return description.ToString ();
+ }
+
static CompletionItemRules ProtocolCompletionRules = CompletionItemRules.Create (formatOnCommit: true);
- protected override Task<TextChange?> GetTextChangeAsync (CompletionItem selectedItem, char? ch, CancellationToken cancellationToken)
+ public override async Task<CompletionChange> GetChangeAsync (Document document, CompletionItem item, char? commitKey, CancellationToken cancellationToken)
+ {
+ var change = (await GetTextChangeAsync (document, item, commitKey, cancellationToken).ConfigureAwait (false))
+ ?? new TextChange (item.Span, item.DisplayText);
+ return CompletionChange.Create (change);
+ }
+
+ public virtual Task<TextChange?> GetTextChangeAsync (Document document, CompletionItem selectedItem, char? ch, CancellationToken cancellationToken)
+ {
+ return GetTextChangeAsync (selectedItem, ch, cancellationToken);
+ }
+
+ Task<TextChange?> GetTextChangeAsync (CompletionItem selectedItem, char? ch, CancellationToken cancellationToken)
{
var text = Microsoft.CodeAnalysis.Completion.Providers.SymbolCompletionItem.GetInsertionText (selectedItem);
return Task.FromResult<TextChange?> (new TextChange (new TextSpan (selectedItem.Span.Start, selectedItem.Span.Length), text));
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeCompletion/RoslynCompletionData.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeCompletion/RoslynCompletionData.cs
index cb3c9da9ff..ff0978a2a9 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeCompletion/RoslynCompletionData.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeCompletion/RoslynCompletionData.cs
@@ -273,7 +273,12 @@ namespace MonoDevelop.Ide.CodeCompletion
public override async Task<TooltipInformation> CreateTooltipInformation (bool smartWrap, CancellationToken cancelToken)
{
- var description = await Task.Run (() => completionService.GetDescriptionAsync (doc, CompletionItem)).ConfigureAwait (false);
+ CompletionDescription description;
+ if (CommonCompletionItem.HasDescription (CompletionItem)) {
+ description = CommonCompletionItem.GetDescription (CompletionItem);
+ } else {
+ description = await Task.Run (() => completionService.GetDescriptionAsync (doc, CompletionItem)).ConfigureAwait (false);
+ }
var markup = new StringBuilder ();
var theme = SyntaxHighlightingService.GetIdeFittingTheme (DefaultSourceEditorOptions.Instance.GetEditorTheme ());
var taggedParts = description.TaggedParts;