Skip to content

Commit 9382981

Browse files
Merge pull request #233 from DustinCampbell/issue-30
Properly extract XML doc comment summary content in hover tips, signature help, and completion list
2 parents 15681e0 + 268f60b commit 9382981

File tree

4 files changed

+34
-29
lines changed

4 files changed

+34
-29
lines changed

src/features/completionItemProvider.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
'use strict';
77

8-
import {plain} from './documentation';
8+
import {extractSummaryText} from './documentation';
99
import AbstractSupport from './abstractProvider';
1010
import * as protocol from '../protocol';
1111
import * as serverUtils from '../omnisharpUtils';
@@ -42,13 +42,14 @@ export default class OmniSharpCompletionItemProvider extends AbstractSupport imp
4242
for (let value of values) {
4343
let completion = new CompletionItem(value.CompletionText.replace(/\(|\)|<|>/g, ''));
4444
completion.detail = value.ReturnType ? `${value.ReturnType} ${value.DisplayText}` : value.DisplayText;
45-
completion.documentation = plain(value.Description);
45+
completion.documentation = extractSummaryText(value.Description);
4646
completion.kind = _kinds[value.Kind] || CompletionItemKind.Property;
4747

4848
let array = completions[completion.label];
4949
if (!array) {
5050
completions[completion.label] = [completion];
51-
} else {
51+
}
52+
else {
5253
array.push(completion);
5354
}
5455
}
@@ -63,10 +64,12 @@ export default class OmniSharpCompletionItemProvider extends AbstractSupport imp
6364
// remove non overloaded items
6465
delete completions[key];
6566

66-
} else {
67+
}
68+
else {
6769
// indicate that there is more
6870
suggestion.detail = `${suggestion.detail} (+ ${overloadCount} overload(s))`;
6971
}
72+
7073
result.push(suggestion);
7174
}
7275

src/features/documentation.ts

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,30 @@
22
* Copyright (c) Microsoft Corporation. All rights reserved.
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
5-
'use strict';
6-
75

8-
const _regExp = /<(\S*?).*?>((.|\r|\n)*?)<\/\1>/;
6+
'use strict';
97

10-
/**
11-
* remove xml-tags from string
12-
*/
13-
export function plain(doc: string): string {
8+
const summaryStartTag = /<summary>/i;
9+
const summaryEndTag = /<\/summary>/i;
1410

15-
if (!doc) {
16-
return doc;
11+
export function extractSummaryText(xmlDocComment: string): string {
12+
if (!xmlDocComment) {
13+
return xmlDocComment;
1714
}
18-
19-
let newDoc: string;
20-
21-
while (true) {
22-
newDoc = doc.replace(_regExp,(m, g1, g2, g3) => g2);
23-
if (newDoc === doc) {
24-
break;
25-
}
26-
doc = newDoc;
15+
16+
let summary = xmlDocComment;
17+
18+
let startIndex = summary.search(summaryStartTag);
19+
if (startIndex < 0) {
20+
return summary;
2721
}
28-
29-
return newDoc;
22+
23+
summary = summary.slice(startIndex + '<summary>'.length);
24+
25+
let endIndex = summary.search(summaryEndTag);
26+
if (endIndex < 0) {
27+
return summary;
28+
}
29+
30+
return summary.slice(0, endIndex);
3031
}

src/features/hoverProvider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
'use strict';
77

8-
import {plain} from './documentation';
8+
import {extractSummaryText} from './documentation';
99
import AbstractSupport from './abstractProvider';
1010
import * as protocol from '../protocol';
1111
import * as serverUtils from '../omnisharpUtils';
@@ -21,7 +21,7 @@ export default class OmniSharpHoverProvider extends AbstractSupport implements H
2121

2222
return serverUtils.typeLookup(this._server, req, token).then(value => {
2323
if (value && value.Type) {
24-
let contents = [plain(value.Documentation), { language: 'csharp', value: value.Type }];
24+
let contents = [extractSummaryText(value.Documentation), { language: 'csharp', value: value.Type }];
2525
return new Hover(contents);
2626
}
2727
});

src/features/signatureHelpProvider.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import AbstractSupport from './abstractProvider';
99
import * as serverUtils from '../omnisharpUtils';
10+
import {extractSummaryText} from './documentation';
1011
import {createRequest} from '../typeConvertion';
1112
import {SignatureHelpProvider, SignatureHelp, SignatureInformation, ParameterInformation, CancellationToken, TextDocument, Position} from 'vscode';
1213

@@ -26,15 +27,15 @@ export default class OmniSharpSignatureHelpProvider extends AbstractSupport impl
2627
ret.activeSignature = res.ActiveSignature;
2728
ret.activeParameter = res.ActiveParameter;
2829

29-
for(let signature of res.Signatures) {
30+
for (let signature of res.Signatures) {
3031

31-
let signatureInfo = new SignatureInformation(signature.Label, signature.Documentation);
32+
let signatureInfo = new SignatureInformation(signature.Label, extractSummaryText(signature.Documentation));
3233
ret.signatures.push(signatureInfo);
3334

3435
for (let parameter of signature.Parameters) {
3536
let parameterInfo = new ParameterInformation(
3637
parameter.Label,
37-
parameter.Documentation);
38+
extractSummaryText(parameter.Documentation));
3839

3940
signatureInfo.parameters.push(parameterInfo);
4041
}

0 commit comments

Comments
 (0)