Skip to content

Commit bf16eea

Browse files
committed
Support for contracts
Fixes N1ebieski#3
1 parent 69ce58e commit bf16eea

File tree

11 files changed

+127
-29
lines changed

11 files changed

+127
-29
lines changed

src/completion/Validation.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use strict";
22

3-
import { facade } from "@src/support/util";
3+
import { contract, facade } from "@src/support/util";
44
import * as vscode from "vscode";
55
import { CompletionProvider } from "..";
66
import AutocompleteResult from "../parser/AutocompleteResult";
@@ -97,6 +97,16 @@ export default class Validation implements CompletionProvider {
9797

9898
tags() {
9999
return [
100+
{
101+
class: contract("Validation\\Factory"),
102+
method: ["make"],
103+
argumentIndex: 1,
104+
},
105+
{
106+
class: contract("Validation\\Validator"),
107+
method: ["sometimes"],
108+
argumentIndex: 1,
109+
},
100110
{
101111
class: facade("Validator"),
102112
method: ["validate", "sometimes"],
@@ -126,7 +136,7 @@ export default class Validation implements CompletionProvider {
126136
token: vscode.CancellationToken,
127137
context: vscode.CompletionContext,
128138
): vscode.CompletionItem[] {
129-
if (result.isFunc("validate")) {
139+
if (result.isFuncs(["validate", "make"])) {
130140
return this.handleValidateMethod(document, position, result);
131141
}
132142

@@ -164,7 +174,9 @@ export default class Validation implements CompletionProvider {
164174
position: vscode.Position,
165175
result: AutocompleteResult,
166176
): vscode.CompletionItem[] | undefined {
167-
if (result.isFacade("Validator")) {
177+
if (result.isFacade("Validator") || result.isContracts([
178+
"Validation\\Factory", "Validation\\Validator"
179+
])) {
168180
return this.getRules(document, position);
169181
}
170182
}

src/features/appBinding.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { findHoverMatchesInDoc } from "@src/support/doc";
66
import { detectedRange, detectInDoc } from "@src/support/parser";
77
import { wordMatchRegex } from "@src/support/patterns";
88
import { projectPath } from "@src/support/project";
9-
import { facade } from "@src/support/util";
9+
import { contract, facade } from "@src/support/util";
1010
import * as vscode from "vscode";
1111
import {
1212
CompletionProvider,
@@ -16,6 +16,11 @@ import {
1616
} from "..";
1717

1818
const toFind: FeatureTag = [
19+
{
20+
class: [contract("Container\\Container"), contract("Foundation\\Application")],
21+
method: ["make", "bound"],
22+
argumentIndex: 0,
23+
},
1924
{
2025
class: [...facade("App"), "app"],
2126
method: ["make", "bound", "isShared"],

src/features/asset.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,18 @@ import { getAssets } from "@src/repositories/asset";
44
import { config } from "@src/support/config";
55
import { detectedRange, detectInDoc } from "@src/support/parser";
66
import { wordMatchRegex } from "@src/support/patterns";
7+
import { contract } from "@src/support/util";
78
import * as vscode from "vscode";
89
import { FeatureTag, LinkProvider } from "..";
910

10-
const toFind: FeatureTag = { class: null, method: "asset", argumentIndex: 0 };
11+
const toFind: FeatureTag = [
12+
{ class: null, method: "asset", argumentIndex: 0 },
13+
{
14+
class: contract("Routing\\UrlGenerator"),
15+
method: "asset",
16+
argumentIndex: 0
17+
}
18+
];
1119

1220
export const linkProvider: LinkProvider = (doc: vscode.TextDocument) => {
1321
return detectInDoc<vscode.DocumentLink, "string">(

src/features/auth.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { config } from "@src/support/config";
55
import { findHoverMatchesInDoc } from "@src/support/doc";
66
import { detectedRange, detectInDoc } from "@src/support/parser";
77
import { wordMatchRegex } from "@src/support/patterns";
8-
import { facade, relativeMarkdownLink } from "@src/support/util";
8+
import { contract, facade, relativeMarkdownLink } from "@src/support/util";
99
import { AutocompleteParsingResult } from "@src/types";
1010
import * as vscode from "vscode";
1111
import {
@@ -17,6 +17,19 @@ import {
1717
} from "..";
1818

1919
const toFind: FeatureTag = [
20+
{
21+
class: contract("Auth\\Access\\Gate"),
22+
method: [
23+
"has",
24+
"allows",
25+
"denies",
26+
"check",
27+
"any",
28+
"authorize",
29+
"inspect",
30+
],
31+
argumentIndex: 0,
32+
},
2033
{
2134
class: facade("Gate"),
2235
method: [

src/features/config.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import { getConfigs } from "@src/repositories/configs";
44
import { config } from "@src/support/config";
55
import { findHoverMatchesInDoc } from "@src/support/doc";
66
import { detectedRange, detectInDoc } from "@src/support/parser";
7-
import { wordMatchRegex } from "@src/support/patterns";
7+
import { controllerActionRegex, wordMatchRegex } from "@src/support/patterns";
88
import { projectPath } from "@src/support/project";
9-
import { facade } from "@src/support/util";
9+
import { contract, facade } from "@src/support/util";
1010
import { AutocompleteParsingResult } from "@src/types";
1111
import * as vscode from "vscode";
1212
import {
@@ -18,6 +18,11 @@ import {
1818

1919
const toFind: FeatureTag = [
2020
{ method: "config", argumentIndex: 0 },
21+
{
22+
class: [contract("Config\\Repository")],
23+
method: ["get", "prepend", "push"],
24+
argumentIndex: 0,
25+
},
2126
{
2227
class: [...facade("Config"), "config"],
2328
method: [

src/features/controllerAction.ts

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,41 @@ import { getRoutes } from "@src/repositories/routes";
55
import { config } from "@src/support/config";
66
import { detectedRange, detectInDoc } from "@src/support/parser";
77
import { wordMatchRegex } from "@src/support/patterns";
8-
import { facade } from "@src/support/util";
8+
import { contract, facade } from "@src/support/util";
99
import { AutocompleteParsingResult } from "@src/types";
1010
import * as vscode from "vscode";
1111
import { LinkProvider } from "..";
1212

13-
const toFind = {
14-
class: facade("Route"),
15-
method: [
16-
"get",
17-
"post",
18-
"patch",
19-
"put",
20-
"delete",
21-
"options",
22-
"any",
23-
"match",
24-
"fallback",
25-
"addRoute",
26-
"newRoute",
27-
],
28-
};
13+
const toFind = [
14+
{
15+
class: contract("Routing\\Registrar"),
16+
method: [
17+
"get",
18+
"post",
19+
"patch",
20+
"put",
21+
"delete",
22+
"options",
23+
"match",
24+
]
25+
},
26+
{
27+
class: facade("Route"),
28+
method: [
29+
"get",
30+
"post",
31+
"patch",
32+
"put",
33+
"delete",
34+
"options",
35+
"any",
36+
"match",
37+
"fallback",
38+
"addRoute",
39+
"newRoute",
40+
],
41+
}
42+
];
2943

3044
const isCorrectIndexForMethod = (
3145
item: AutocompleteParsingResult.ContextValue,

src/features/route.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,23 @@ import { findHoverMatchesInDoc } from "@src/support/doc";
77
import { detectedRange, detectInDoc } from "@src/support/parser";
88
import { wordMatchRegex } from "@src/support/patterns";
99
import { projectPath, relativePath } from "@src/support/project";
10-
import { facade } from "@src/support/util";
10+
import { contract, facade } from "@src/support/util";
1111
import { AutocompleteParsingResult } from "@src/types";
1212
import * as vscode from "vscode";
1313
import { FeatureTag, HoverProvider, LinkProvider } from "..";
1414

1515
const toFind: FeatureTag = [
1616
{ method: ["route", "signedRoute", "to_route"] },
17+
{
18+
class: [contract("Routing\\UrlGenerator")],
19+
method: ["route", "signedRoute", "temporarySignedRoute"],
20+
argumentIndex: 0,
21+
},
22+
{
23+
class: [contract("Routing\\ResponseFactory")],
24+
method: "redirectToRoute",
25+
argumentIndex: 0,
26+
},
1727
{
1828
class: [...facade("Redirect"), ...facade("URL"), "redirect", "url"],
1929
method: ["route", "signedRoute", "temporarySignedRoute"],

src/features/translation.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,16 @@ import { findHoverMatchesInDoc } from "@src/support/doc";
99
import { detectedRange, detectInDoc } from "@src/support/parser";
1010
import { wordMatchRegex } from "@src/support/patterns";
1111
import { relativePath } from "@src/support/project";
12-
import { facade } from "@src/support/util";
12+
import { contract, facade } from "@src/support/util";
1313
import * as vscode from "vscode";
1414
import { FeatureTag, HoverProvider, LinkProvider } from "..";
1515

1616
const toFind: FeatureTag = [
17+
{
18+
class: [contract("Translation\\Translator")],
19+
method: ["get", "choice"],
20+
argumentIndex: 0,
21+
},
1722
{
1823
class: facade("Lang"),
1924
method: ["has", "hasForLocale", "get", "getForLocale", "choice"],

src/features/view.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,22 @@ import { findHoverMatchesInDoc } from "@src/support/doc";
1313
import { detectedRange, detectInDoc } from "@src/support/parser";
1414
import { wordMatchRegex } from "@src/support/patterns";
1515
import { projectPath } from "@src/support/project";
16-
import { facade } from "@src/support/util";
16+
import { contract, facade } from "@src/support/util";
1717
import { AutocompleteParsingResult } from "@src/types";
1818
import fs from "fs";
1919
import * as vscode from "vscode";
2020

2121
const toFind: FeatureTag = [
22+
{
23+
class: contract("Routing\\ResponseFactory"),
24+
method: "view",
25+
argumentIndex: 0,
26+
},
27+
{
28+
class: contract("View\\Factory"),
29+
method: "make",
30+
argumentIndex: 0,
31+
},
2232
{
2333
class: facade("View"),
2434
method: [

src/parser/AutocompleteResult.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { facade } from "@src/support/util";
1+
import { contract, facade } from "@src/support/util";
22
import { AutocompleteParsingResult } from "@src/types";
33

44
export default class AutocompleteResult {
@@ -57,6 +57,14 @@ export default class AutocompleteResult {
5757
return this.isClass(facade(className));
5858
}
5959

60+
public isContracts(classNames: string[]) {
61+
return classNames.some((className: string) => this.isContract(className));
62+
}
63+
64+
public isContract(className: string) {
65+
return this.isClass(contract(className));
66+
}
67+
6068
public func() {
6169
// @ts-ignore
6270
return this.result.methodName ?? null;
@@ -83,6 +91,10 @@ export default class AutocompleteResult {
8391
}
8492
}
8593

94+
public isFuncs(funcs: string[]) {
95+
return funcs.some((func: string) => this.isFunc(func));
96+
}
97+
8698
public isFunc(func: string) {
8799
return this.func() === func;
88100
}

0 commit comments

Comments
 (0)