Skip to content

Commit 7516e25

Browse files
committed
Add plugin documentation code lens
Fixes formatting Closes #14
1 parent 219e015 commit 7516e25

File tree

6 files changed

+330
-137
lines changed

6 files changed

+330
-137
lines changed

src/codelens.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import * as vscode from 'vscode';
2+
import {isConfigFile, getASTNode, getRangeFromASTNode} from './helpers';
3+
import parse from 'json-to-ast';
4+
5+
export const pluginLensProvider: vscode.CodeLensProvider = {
6+
provideCodeLenses(
7+
document: vscode.TextDocument,
8+
token: vscode.CancellationToken
9+
): vscode.ProviderResult<vscode.CodeLens[]> {
10+
return createCodeLensForPluginNodes(document);
11+
},
12+
};
13+
14+
export const createCodeLensForPluginNodes = (document: vscode.TextDocument) => {
15+
const codeLens: vscode.CodeLens[] = [];
16+
if (isConfigFile(document)) {
17+
const documentNode = parse(document.getText()) as parse.ObjectNode;
18+
const pluginsNode = getASTNode(
19+
documentNode.children,
20+
'Identifier',
21+
'plugins'
22+
);
23+
24+
if (
25+
pluginsNode &&
26+
(pluginsNode.value as parse.ArrayNode).children.length !== 0
27+
) {
28+
const pluginNodes = (pluginsNode.value as parse.ArrayNode)
29+
.children as parse.ObjectNode[];
30+
31+
pluginNodes.forEach((pluginNode: parse.ObjectNode) => {
32+
const pluginNameNode = getASTNode(
33+
pluginNode.children,
34+
'Identifier',
35+
'name'
36+
);
37+
if (!pluginNameNode) {
38+
return;
39+
}
40+
const pluginName = (pluginNameNode?.value as parse.LiteralNode)
41+
.value as string;
42+
43+
codeLens.push(
44+
new vscode.CodeLens(getRangeFromASTNode(pluginNameNode), {
45+
title: `📄 ${pluginName}`,
46+
command: 'dev-proxy-toolkit.openPluginDoc',
47+
arguments: [pluginName],
48+
})
49+
);
50+
});
51+
}
52+
}
53+
54+
return codeLens;
55+
};

src/constants.ts

Lines changed: 196 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -1,112 +1,198 @@
1-
import { PluginSnippets } from "./types";
1+
import {PluginDocs, PluginSnippets} from './types';
22

33
export const pluginSnippets: PluginSnippets = {
4-
CachingGuidancePlugin: {
5-
instance: "devproxy-plugin-caching-guidance",
6-
config: {
7-
name: "devproxy-plugin-caching-guidance-config",
8-
required: false
9-
}
10-
},
11-
CrudApiPlugin: {
12-
instance: "devproxy-plugin-crud-api",
13-
config: {
14-
name: "devproxy-plugin-crud-api-config",
15-
required: true
16-
},
17-
},
18-
DevToolsPlugin: {
19-
instance: "devproxy-plugin-dev-tools",
20-
config: {
21-
name: "devproxy-plugin-dev-tools-config",
22-
required: false
23-
},
24-
},
25-
ExecutionSummaryPlugin: {
26-
instance: "devproxy-plugin-execution-summary",
27-
config: {
28-
name: "devproxy-plugin-execution-summary-config",
29-
required: false
30-
}
31-
},
32-
GenericRandomErrorPlugin: {
33-
instance: "devproxy-plugin-generic-random-error",
34-
config: {
35-
name: "devproxy-plugin-generic-random-error-config",
36-
required: true
37-
}
38-
},
39-
GraphBetaSupportGuidancePlugin: {
40-
instance: "devproxy-plugin-graph-beta-support-guidance"
41-
},
42-
GraphClientRequestIdGuidancePlugin: {
43-
instance: "devproxy-plugin-graph-client-request-id-guidance"
44-
},
45-
GraphMockResponsePlugin: {
46-
instance: "devproxy-plugin-graph-mock-response"
47-
},
48-
GraphRandomErrorPlugin: {
49-
instance: "devproxy-plugin-graph-random-error",
50-
config: {
51-
name: "devproxy-plugin-graph-random-error-config",
52-
required: false
53-
}
54-
},
55-
GraphSdkGuidancePlugin: {
56-
instance: "devproxy-plugin-graph-sdk-guidance",
57-
},
58-
GraphSelectGuidancePlugin: {
59-
instance: "devproxy-plugin-graph-select-guidance",
60-
},
61-
LatencyPlugin: {
62-
instance: "devproxy-plugin-latency",
63-
config: {
64-
name: "devproxy-plugin-latency-config",
65-
required: false
66-
}
67-
},
68-
MinimalPermissionsGuidancePlugin:
69-
{
70-
instance: "devproxy-plugin-minimal-permissions-guidance",
71-
config: {
72-
name: "devproxy-plugin-minimal-permissions-guidance-config",
73-
required: false
74-
}
75-
},
76-
MinimalPermissionsPlugin: {
77-
instance: "devproxy-plugin-minimal-permissions",
78-
config: {
79-
name: "devproxy-plugin-minimal-permissions-config",
80-
required: false
81-
}
82-
},
83-
MockGeneratorPlugin: {
84-
instance: "devproxy-plugin-mock-generator"
85-
},
86-
MockResponsePlugin: {
87-
instance: "devproxy-plugin-mock-response",
88-
config: {
89-
name: "devproxy-plugin-mock-response-config",
90-
required: true
91-
}
92-
},
93-
ODataPagingGuidancePlugin: {
94-
instance: "devproxy-plugin-odata-paging-guidance"
95-
},
96-
ODSPSearchGuidancePlugin: {
97-
instance: "devproxy-plugin-odsp-search-guidance"
98-
},
99-
OpenAPIDocGeneratorPlugin: {
100-
instance: "devproxy-plugin-openapi-doc-generator"
101-
},
102-
RateLimitingPlugin: {
103-
instance: "devproxy-plugin-rate-limiting",
104-
config: {
105-
name: "devproxy-plugin-rate-limiting-config",
106-
required: true
107-
}
108-
},
109-
RetryAfterPlugin: {
110-
instance: "devproxy-plugin-retry-after"
111-
}
112-
};
4+
CachingGuidancePlugin: {
5+
instance: 'devproxy-plugin-caching-guidance',
6+
config: {
7+
name: 'devproxy-plugin-caching-guidance-config',
8+
required: false,
9+
},
10+
},
11+
CrudApiPlugin: {
12+
instance: 'devproxy-plugin-crud-api',
13+
config: {
14+
name: 'devproxy-plugin-crud-api-config',
15+
required: true,
16+
},
17+
},
18+
DevToolsPlugin: {
19+
instance: 'devproxy-plugin-dev-tools',
20+
config: {
21+
name: 'devproxy-plugin-dev-tools-config',
22+
required: false,
23+
},
24+
},
25+
ExecutionSummaryPlugin: {
26+
instance: 'devproxy-plugin-execution-summary',
27+
config: {
28+
name: 'devproxy-plugin-execution-summary-config',
29+
required: false,
30+
},
31+
},
32+
GenericRandomErrorPlugin: {
33+
instance: 'devproxy-plugin-generic-random-error',
34+
config: {
35+
name: 'devproxy-plugin-generic-random-error-config',
36+
required: true,
37+
},
38+
},
39+
GraphBetaSupportGuidancePlugin: {
40+
instance: 'devproxy-plugin-graph-beta-support-guidance',
41+
},
42+
GraphClientRequestIdGuidancePlugin: {
43+
instance: 'devproxy-plugin-graph-client-request-id-guidance',
44+
},
45+
GraphMockResponsePlugin: {
46+
instance: 'devproxy-plugin-graph-mock-response',
47+
},
48+
GraphRandomErrorPlugin: {
49+
instance: 'devproxy-plugin-graph-random-error',
50+
config: {
51+
name: 'devproxy-plugin-graph-random-error-config',
52+
required: false,
53+
},
54+
},
55+
GraphSdkGuidancePlugin: {
56+
instance: 'devproxy-plugin-graph-sdk-guidance',
57+
},
58+
GraphSelectGuidancePlugin: {
59+
instance: 'devproxy-plugin-graph-select-guidance',
60+
},
61+
LatencyPlugin: {
62+
instance: 'devproxy-plugin-latency',
63+
config: {
64+
name: 'devproxy-plugin-latency-config',
65+
required: false,
66+
},
67+
},
68+
MinimalPermissionsGuidancePlugin: {
69+
instance: 'devproxy-plugin-minimal-permissions-guidance',
70+
config: {
71+
name: 'devproxy-plugin-minimal-permissions-guidance-config',
72+
required: false,
73+
},
74+
},
75+
MinimalPermissionsPlugin: {
76+
instance: 'devproxy-plugin-minimal-permissions',
77+
config: {
78+
name: 'devproxy-plugin-minimal-permissions-config',
79+
required: false,
80+
},
81+
},
82+
MockGeneratorPlugin: {
83+
instance: 'devproxy-plugin-mock-generator',
84+
},
85+
MockResponsePlugin: {
86+
instance: 'devproxy-plugin-mock-response',
87+
config: {
88+
name: 'devproxy-plugin-mock-response-config',
89+
required: true,
90+
},
91+
},
92+
ODataPagingGuidancePlugin: {
93+
instance: 'devproxy-plugin-odata-paging-guidance',
94+
},
95+
ODSPSearchGuidancePlugin: {
96+
instance: 'devproxy-plugin-odsp-search-guidance',
97+
},
98+
OpenAPIDocGeneratorPlugin: {
99+
instance: 'devproxy-plugin-openapi-doc-generator',
100+
},
101+
RateLimitingPlugin: {
102+
instance: 'devproxy-plugin-rate-limiting',
103+
config: {
104+
name: 'devproxy-plugin-rate-limiting-config',
105+
required: true,
106+
},
107+
},
108+
RetryAfterPlugin: {
109+
instance: 'devproxy-plugin-retry-after',
110+
},
111+
};
112+
113+
export const pluginDocs: PluginDocs = {
114+
CachingGuidancePlugin: {
115+
name: 'Caching Guidance Plugin',
116+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/cachingguidanceplugin',
117+
},
118+
CrudApiPlugin: {
119+
name: 'CRUD API Plugin',
120+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/crudapiplugin',
121+
},
122+
DevToolsPlugin: {
123+
name: 'Dev Tools Plugin',
124+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/devtoolsplugin',
125+
},
126+
ExecutionSummaryPlugin: {
127+
name: 'Execution Summary Plugin',
128+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/executionsummaryplugin',
129+
},
130+
GenericRandomErrorPlugin: {
131+
name: 'Generic Random Error Plugin',
132+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/genericrandomerrorplugin',
133+
},
134+
GraphBetaSupportGuidancePlugin: {
135+
name: 'Graph Beta Support Guidance Plugin',
136+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/graphbetasupportguidanceplugin',
137+
},
138+
GraphClientRequestIdGuidancePlugin: {
139+
name: 'Graph Client Request ID Guidance Plugin',
140+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/graphclientrequestidguidanceplugin',
141+
},
142+
GraphMockResponsePlugin: {
143+
name: 'Graph Mock Response Plugin',
144+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/graphmockresponseplugin',
145+
},
146+
GraphRandomErrorPlugin: {
147+
name: 'Graph Random Error Plugin',
148+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/graphrandomerrorplugin',
149+
},
150+
GraphSdkGuidancePlugin: {
151+
name: 'Graph SDK Guidance Plugin',
152+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/graphsdkguidanceplugin',
153+
},
154+
GraphSelectGuidancePlugin: {
155+
name: 'Graph Select Guidance Plugin',
156+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/graphselectguidanceplugin',
157+
},
158+
LatencyPlugin: {
159+
name: 'Latency Plugin',
160+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/latencyplugin',
161+
},
162+
MinimalPermissionsGuidancePlugin: {
163+
name: 'Minimal Permissions Guidance Plugin',
164+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/minimalpermissionsguidanceplugin',
165+
},
166+
MinimalPermissionsPlugin: {
167+
name: 'Minimal Permissions Plugin',
168+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/minimalpermissionsplugin',
169+
},
170+
MockGeneratorPlugin: {
171+
name: 'Mock Generator Plugin',
172+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/mockgeneratorplugin',
173+
},
174+
MockResponsePlugin: {
175+
name: 'Mock Response Plugin',
176+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/mockresponseplugin',
177+
},
178+
ODataPagingGuidancePlugin: {
179+
name: 'OData Paging Guidance Plugin',
180+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/odatapagingguidanceplugin',
181+
},
182+
ODSPSearchGuidancePlugin: {
183+
name: 'ODSP Search Guidance Plugin',
184+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/odspsearchguidanceplugin',
185+
},
186+
OpenAPISpecGeneratorPlugin: {
187+
name: 'Open API Spec Generator Plugin',
188+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/openapispecgeneratorplugin',
189+
},
190+
RateLimitingPlugin: {
191+
name: 'Rate Limiting Plugin',
192+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/ratelimitingplugin',
193+
},
194+
RetryAfterPlugin: {
195+
name: 'Retry After Plugin',
196+
url: 'https://learn.microsoft.com/microsoft-cloud/dev/dev-proxy/technical-reference/retryafterplugin',
197+
}
198+
};

0 commit comments

Comments
 (0)