Skip to content

Commit acf5e09

Browse files
feat: show human readable format for cron
1 parent 7d28d6b commit acf5e09

File tree

4 files changed

+44
-1
lines changed

4 files changed

+44
-1
lines changed

package-lock.json

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,7 @@
427427
"@xml-tools/parser": "^1.0.11",
428428
"@xml-tools/simple-schema": "^3.0.5",
429429
"@xml-tools/validation": "^1.0.16",
430+
"cronstrue": "^2.59.0",
430431
"fast-xml-parser": "^4.5.1",
431432
"formik": "^2.4.6",
432433
"glob": "^11.0.1",

src/hover/XmlHoverProviderProcessor.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ import { CancellationToken, Hover, Position, TextDocument } from 'vscode';
22
import { XmlSuggestionProviderProcessor } from 'common/xml/XmlSuggestionProviderProcessor';
33
import { AclHoverProvider } from 'hover/xml/AclHoverProvider';
44
import { ModuleHoverProvider } from 'hover/xml/ModuleHoverProvider';
5+
import { CronHoverProvider } from 'hover/xml/CronHoverProvider';
56

67
export class XmlHoverProviderProcessor extends XmlSuggestionProviderProcessor<Hover> {
78
public constructor() {
8-
super([new AclHoverProvider(), new ModuleHoverProvider()]);
9+
super([new AclHoverProvider(), new ModuleHoverProvider(), new CronHoverProvider()]);
910
}
1011

1112
public async provideHover(

src/hover/xml/CronHoverProvider.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { Hover, MarkdownString, Range } from 'vscode';
2+
import { CombinedCondition, XmlSuggestionProvider } from 'common/xml/XmlSuggestionProvider';
3+
import { ElementNameMatches } from 'common/xml/suggestion/condition/ElementNameMatches';
4+
import cronstrue from 'cronstrue';
5+
6+
export class CronHoverProvider extends XmlSuggestionProvider<Hover> {
7+
public getElementContentMatches(): CombinedCondition[] {
8+
return [[new ElementNameMatches('schedule')]];
9+
}
10+
11+
public getConfigKey(): string | undefined {
12+
return 'provideXmlHovers';
13+
}
14+
15+
public getFilePatterns(): string[] {
16+
return ['**/etc/crontab.xml'];
17+
}
18+
19+
public getSuggestionItems(value: string, range: Range): Hover[] {
20+
const readable = cronstrue.toString(value);
21+
22+
if (!readable) {
23+
return [];
24+
}
25+
26+
const markdown = new MarkdownString();
27+
markdown.appendMarkdown(`**Cron**: ${readable}`);
28+
29+
return [new Hover(markdown, range)];
30+
}
31+
}

0 commit comments

Comments
 (0)