occam-verify-cli 0.0.1006 → 0.0.1007
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/action/verify.js +15 -2
- package/bin/utilities/releaseContext.js +5 -7
- package/lib/combinator.js +7 -3
- package/lib/conclusion.js +6 -3
- package/lib/context/file.js +134 -57
- package/lib/context/release.js +91 -50
- package/lib/log.js +15 -25
- package/lib/metaType.js +6 -4
- package/lib/metavariable.js +9 -15
- package/lib/premise.js +6 -2
- package/lib/ruleNames.js +5 -1
- package/lib/utilities/node.js +22 -1
- package/lib/utilities/releaseContext.js +6 -8
- package/lib/utilities/tokens.js +8 -1
- package/lib/verify/declaration/metavariable.js +3 -10
- package/lib/verify/files.js +1 -1
- package/lib/verify/release.js +27 -18
- package/package.json +1 -1
- package/src/combinator.js +12 -2
- package/src/conclusion.js +10 -2
- package/src/context/file.js +84 -45
- package/src/context/release.js +120 -47
- package/src/log.js +16 -31
- package/src/metaType.js +5 -3
- package/src/metavariable.js +6 -12
- package/src/premise.js +11 -1
- package/src/ruleNames.js +1 -0
- package/src/utilities/node.js +27 -2
- package/src/utilities/releaseContext.js +6 -8
- package/src/utilities/tokens.js +7 -0
- package/src/verify/declaration/metavariable.js +2 -13
- package/src/verify/files.js +1 -1
- package/src/verify/release.js +30 -18
package/src/log.js
CHANGED
|
@@ -25,37 +25,37 @@ export default class Log {
|
|
|
25
25
|
return this.follow;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
trace(message,
|
|
28
|
+
trace(message, filePath) {
|
|
29
29
|
const level = TRACE_LEVEL;
|
|
30
30
|
|
|
31
|
-
this.write(level, message,
|
|
31
|
+
this.write(level, message, filePath);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
debug(message,
|
|
34
|
+
debug(message, filePath) {
|
|
35
35
|
const level = DEBUG_LEVEL;
|
|
36
36
|
|
|
37
|
-
this.write(level, message,
|
|
37
|
+
this.write(level, message, filePath);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
info(message,
|
|
40
|
+
info(message, filePath) {
|
|
41
41
|
const level = INFO_LEVEL;
|
|
42
42
|
|
|
43
|
-
this.write(level, message,
|
|
43
|
+
this.write(level, message, filePath);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
warning(message,
|
|
46
|
+
warning(message, filePath) {
|
|
47
47
|
const level = WARNING_LEVEL;
|
|
48
48
|
|
|
49
|
-
this.write(level, message,
|
|
49
|
+
this.write(level, message, filePath);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
error(message,
|
|
52
|
+
error(message, filePath) {
|
|
53
53
|
const level = ERROR_LEVEL;
|
|
54
54
|
|
|
55
|
-
this.write(level, message,
|
|
55
|
+
this.write(level, message, filePath);
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
write(level, message,
|
|
58
|
+
write(level, message, filePath) {
|
|
59
59
|
const levels = [
|
|
60
60
|
TRACE_LEVEL,
|
|
61
61
|
DEBUG_LEVEL,
|
|
@@ -70,7 +70,7 @@ export default class Log {
|
|
|
70
70
|
return;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
message = formatMessage(level, message,
|
|
73
|
+
message = formatMessage(level, message, filePath); ///
|
|
74
74
|
|
|
75
75
|
this.follow ?
|
|
76
76
|
console.log(message) :
|
|
@@ -96,27 +96,12 @@ export default class Log {
|
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
function formatMessage(level, message,
|
|
99
|
+
function formatMessage(level, message, filePath = null) {
|
|
100
100
|
const upperCaseLevel = level.toUpperCase();
|
|
101
101
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
`${upperCaseLevel}: ${
|
|
105
|
-
`${upperCaseLevel}: ${message}`;
|
|
106
|
-
} else {
|
|
107
|
-
const leastLineIndex = leastLineIndexFromNodeAndTokens(node, tokens),
|
|
108
|
-
leastLineNumber = leastLineIndex, ///
|
|
109
|
-
greatestLineIndex = greatestLineIndexFromNodeAndTokens(node, tokens),
|
|
110
|
-
greatestLineNumber = greatestLineIndex; ///
|
|
111
|
-
|
|
112
|
-
if (leastLineNumber === greatestLineNumber) {
|
|
113
|
-
const lineNumber = leastLineNumber; ///
|
|
114
|
-
|
|
115
|
-
message = `${upperCaseLevel}: ${filePath} (${lineNumber}) - ${message}`;
|
|
116
|
-
} else {
|
|
117
|
-
message = `${upperCaseLevel}: ${filePath} (${leastLineNumber}-${greatestLineNumber}) - ${message}`;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
102
|
+
message = (filePath !== null) ?
|
|
103
|
+
`${upperCaseLevel}: ${filePath} - ${message}`:
|
|
104
|
+
`${upperCaseLevel}: ${message}`;
|
|
120
105
|
|
|
121
106
|
return message;
|
|
122
107
|
}
|
package/src/metaType.js
CHANGED
|
@@ -71,11 +71,13 @@ Object.assign(shim, {
|
|
|
71
71
|
export default MetaType;
|
|
72
72
|
|
|
73
73
|
export function metaTypeFromJSON(json, fileContext) {
|
|
74
|
-
let metaType;
|
|
74
|
+
let metaType = null;
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
if (json !== null) {
|
|
77
|
+
const { name } = json;
|
|
77
78
|
|
|
78
|
-
|
|
79
|
+
metaType = new MetaType(name);
|
|
80
|
+
}
|
|
79
81
|
|
|
80
82
|
return metaType;
|
|
81
83
|
}
|
package/src/metavariable.js
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
import { metaTypeFromJSON } from "./metaType";
|
|
4
4
|
import { metavariableNameFromMetavariableNode } from "./utilities/name";
|
|
5
|
+
import { metavariableNodeFromMetavariableString } from "./utilities/node";
|
|
5
6
|
|
|
6
7
|
export default class Metavariable {
|
|
7
|
-
constructor(string, node, name,
|
|
8
|
+
constructor(string, node, name, metaType) {
|
|
8
9
|
this.string = string;
|
|
9
10
|
this.node = node;
|
|
10
11
|
this.name = name;
|
|
11
|
-
this.termType = termType;
|
|
12
12
|
this.metaType = metaType;
|
|
13
13
|
}
|
|
14
14
|
|
|
@@ -24,10 +24,6 @@ export default class Metavariable {
|
|
|
24
24
|
return this.name;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
getTermType() {
|
|
28
|
-
return this.termType;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
27
|
getMetaType() {
|
|
32
28
|
return this.metaType;
|
|
33
29
|
}
|
|
@@ -80,8 +76,7 @@ export default class Metavariable {
|
|
|
80
76
|
|
|
81
77
|
const metavariableName = metavariableNameFromMetavariableNode(metavariableNode),
|
|
82
78
|
name = metavariableName, ///
|
|
83
|
-
|
|
84
|
-
metavariable = new Metavariable(string, node, name, termType, metaType);
|
|
79
|
+
metavariable = new Metavariable(string, node, name, metaType);
|
|
85
80
|
|
|
86
81
|
return metavariable;
|
|
87
82
|
}
|
|
@@ -91,19 +86,18 @@ export default class Metavariable {
|
|
|
91
86
|
name = metavariableName, ///
|
|
92
87
|
node = metavariableNode, ///
|
|
93
88
|
string = fileContext.nodeAsString(node),
|
|
94
|
-
termType = null,
|
|
95
89
|
metaType = null,
|
|
96
|
-
metavariable = new Metavariable(string, node, name,
|
|
90
|
+
metavariable = new Metavariable(string, node, name, metaType);
|
|
97
91
|
|
|
98
92
|
return metavariable;
|
|
99
93
|
}
|
|
100
94
|
|
|
101
|
-
static
|
|
95
|
+
static fromMetavariableNodeAndMetaType(metavariableNode, metaType, fileContext) {
|
|
102
96
|
const metavariableName = metavariableNameFromMetavariableNode(metavariableNode),
|
|
103
97
|
name = metavariableName, ///
|
|
104
98
|
node = metavariableNode, ///
|
|
105
99
|
string = fileContext.nodeAsString(node),
|
|
106
|
-
metavariable = new Metavariable(string, node, name,
|
|
100
|
+
metavariable = new Metavariable(string, node, name, metaType);
|
|
107
101
|
|
|
108
102
|
return metavariable;
|
|
109
103
|
}
|
package/src/premise.js
CHANGED
|
@@ -9,6 +9,7 @@ import UnqualifiedStatement from "./statement/unqualified";
|
|
|
9
9
|
import { trim } from "./utilities/string";
|
|
10
10
|
import { nodeQuery } from "./utilities/query";
|
|
11
11
|
import { assignAssignments } from "./utilities/assignments";
|
|
12
|
+
import { unqualifiedStatementNodeFromUnqualifiedStatementString } from "./utilities/node";
|
|
12
13
|
|
|
13
14
|
const unqualifiedStatementNodeQuery = nodeQuery("/premise/unqualifiedStatement");
|
|
14
15
|
|
|
@@ -152,7 +153,16 @@ export default class Premise {
|
|
|
152
153
|
}
|
|
153
154
|
|
|
154
155
|
static fromJSON(json, fileContext) {
|
|
155
|
-
let
|
|
156
|
+
let { unqualifiedStatement } = json;
|
|
157
|
+
|
|
158
|
+
const lexer = fileContext.getLexer(),
|
|
159
|
+
parser = fileContext.getParser(),
|
|
160
|
+
unqualifiedStatementString = unqualifiedStatement, ///
|
|
161
|
+
unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementString(unqualifiedStatementString, lexer, parser);
|
|
162
|
+
|
|
163
|
+
unqualifiedStatement = UnqualifiedStatement.fromUnqualifiedStatementNode(unqualifiedStatementNode, fileContext);
|
|
164
|
+
|
|
165
|
+
const premise = new Premise(fileContext, unqualifiedStatement);
|
|
156
166
|
|
|
157
167
|
return premise;
|
|
158
168
|
}
|
package/src/ruleNames.js
CHANGED
package/src/utilities/node.js
CHANGED
|
@@ -4,8 +4,12 @@ import { parsersUtilities } from "occam-custom-grammars";
|
|
|
4
4
|
|
|
5
5
|
import { nodeQuery } from "../utilities/query";
|
|
6
6
|
import { combinedCustomGrammarFromNothing } from "./customGrammar";
|
|
7
|
-
import { TERM_RULE_NAME,
|
|
8
|
-
|
|
7
|
+
import { TERM_RULE_NAME,
|
|
8
|
+
METAVARIABLE_RULE_NAME,
|
|
9
|
+
UNQUALIFIED_STATEMENT_RULE_NAME } from "../ruleNames";
|
|
10
|
+
import { termTokensFromTermString,
|
|
11
|
+
metavariableTokensFromMetavariableString,
|
|
12
|
+
unqualifiedStatementTokensFromUnqualifiedStatementString } from "../utilities/tokens";
|
|
9
13
|
|
|
10
14
|
const { nominalParserFromCombinedCustomGrammar } = parsersUtilities;
|
|
11
15
|
|
|
@@ -31,6 +35,20 @@ export function statementNodeFromStatementString(statementString, lexer, parser)
|
|
|
31
35
|
return statementNode;
|
|
32
36
|
}
|
|
33
37
|
|
|
38
|
+
export function metavariableNodeFromMetavariableString(metavariableString, lexer, parser) {
|
|
39
|
+
const metavariableTokens = metavariableTokensFromMetavariableString(metavariableString, lexer),
|
|
40
|
+
metavariableNode = metavariableNodeFromMetavariableTokens(metavariableTokens, parser);
|
|
41
|
+
|
|
42
|
+
return metavariableNode;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function unqualifiedStatementNodeFromUnqualifiedStatementString(unqualifiedStatementString, lexer, parser) {
|
|
46
|
+
const unqualifiedStatementTokens = unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer),
|
|
47
|
+
unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser);
|
|
48
|
+
|
|
49
|
+
return unqualifiedStatementNode;
|
|
50
|
+
}
|
|
51
|
+
|
|
34
52
|
export function termNodeFromTermTokens(termTokens, parser) {
|
|
35
53
|
const tokens = termTokens, ///
|
|
36
54
|
ruleName = TERM_RULE_NAME,
|
|
@@ -39,6 +57,13 @@ export function termNodeFromTermTokens(termTokens, parser) {
|
|
|
39
57
|
return termNode;
|
|
40
58
|
}
|
|
41
59
|
|
|
60
|
+
export function metavariableNodeFromMetavariableTokens(metavariableTokens, parser) {
|
|
61
|
+
const ruleName = METAVARIABLE_RULE_NAME,
|
|
62
|
+
metavariableNode = nodeFromTokensRuleNameAndParser(metavariableTokens, ruleName, parser);
|
|
63
|
+
|
|
64
|
+
return metavariableNode;
|
|
65
|
+
}
|
|
66
|
+
|
|
42
67
|
export function unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser) {
|
|
43
68
|
const tokens = unqualifiedStatementTokens, ///
|
|
44
69
|
ruleName = UNQUALIFIED_STATEMENT_RULE_NAME,
|
|
@@ -101,18 +101,16 @@ export function initialiseReleaseContext(dependency, context) {
|
|
|
101
101
|
releaseContextInitialised = releaseContext.isInitialised();
|
|
102
102
|
|
|
103
103
|
if (!releaseContextInitialised) {
|
|
104
|
-
|
|
104
|
+
initialiseDependencyReleaseContexts(dependency, releaseContext, context);
|
|
105
105
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
releaseContexts = retrieveReleaseContexts(releaseContext, releaseContextMap);
|
|
106
|
+
const { log } = context,
|
|
107
|
+
releaseContexts = retrieveReleaseContexts(releaseContext, releaseContextMap);
|
|
109
108
|
|
|
110
|
-
|
|
109
|
+
log.debug(`Initialising the '${dependencyName}' context...`);
|
|
111
110
|
|
|
112
|
-
|
|
111
|
+
releaseContext.initialise(releaseContexts);
|
|
113
112
|
|
|
114
|
-
|
|
115
|
-
}
|
|
113
|
+
log.info(`...initialised the '${dependencyName}' context.`);
|
|
116
114
|
}
|
|
117
115
|
}
|
|
118
116
|
|
package/src/utilities/tokens.js
CHANGED
|
@@ -16,6 +16,13 @@ export function termTokensFromTermString(termString, lexer) {
|
|
|
16
16
|
return termTokens;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
export function metavariableTokensFromMetavariableString(metavariableString, lexer) {
|
|
20
|
+
const metavariableContent = `${metavariableString}`,
|
|
21
|
+
metavariableTokens = tokensFromContentAndLexer(metavariableContent, lexer);
|
|
22
|
+
|
|
23
|
+
return metavariableTokens;
|
|
24
|
+
}
|
|
25
|
+
|
|
19
26
|
export function unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer) {
|
|
20
27
|
const content = unqualifiedStatementString, ///
|
|
21
28
|
unqualifiedStatementTokens = tokensFromContentAndLexer(content, lexer);
|
|
@@ -52,24 +52,13 @@ function verifyMetavariable(metavariableNode, metaTypeNode, fileContext) {
|
|
|
52
52
|
metaTypeVerified = verifyMetaType(metaTypeNode, metaTypes, fileContext);
|
|
53
53
|
|
|
54
54
|
if (argumentVerified && metaTypeVerified) {
|
|
55
|
-
let
|
|
56
|
-
metaType;
|
|
55
|
+
let metaType;
|
|
57
56
|
|
|
58
57
|
const firstMetaType = first(metaTypes);
|
|
59
58
|
|
|
60
59
|
metaType = firstMetaType; ///
|
|
61
60
|
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
if (termTypesLength === 0) {
|
|
65
|
-
termType = null;
|
|
66
|
-
} else {
|
|
67
|
-
const firstTermType = first(termTypes);
|
|
68
|
-
|
|
69
|
-
termType = firstTermType; ///
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const metavariable = Metavariable.fromMetavariableNodeNameTermTypeAndMetaType(metavariableNode, termType, metaType, fileContext),
|
|
61
|
+
const metavariable = Metavariable.fromMetavariableNodeAndMetaType(metavariableNode, metaType, fileContext),
|
|
73
62
|
metavariableAssignment = MetavariableAssignment.fromMetavariable(metavariable),
|
|
74
63
|
metavariableAssigned = metavariableAssignment.assign(fileContext);
|
|
75
64
|
|
package/src/verify/files.js
CHANGED
package/src/verify/release.js
CHANGED
|
@@ -2,34 +2,46 @@
|
|
|
2
2
|
|
|
3
3
|
import verifyFiles from "../verify/files";
|
|
4
4
|
|
|
5
|
-
export default function verifyRelease(releaseName, releaseContextMap) {
|
|
5
|
+
export default function verifyRelease(releaseName, dependentName, dependentReleased, releaseContextMap) {
|
|
6
6
|
let releaseVerified = false;
|
|
7
7
|
|
|
8
8
|
const releaseContext = releaseContextMap[releaseName];
|
|
9
9
|
|
|
10
10
|
if (releaseContext !== null) {
|
|
11
|
-
const
|
|
11
|
+
const released = releaseContext.isReleased();
|
|
12
12
|
|
|
13
|
-
if (
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
if (
|
|
17
|
-
|
|
13
|
+
if (released) {
|
|
14
|
+
releaseVerified = true;
|
|
15
|
+
} else {
|
|
16
|
+
if (dependentReleased) {
|
|
17
|
+
releaseContext.warning(`The '${releaseName}' project cannot be verified because its '${dependentName}' dependent is a package.`);
|
|
18
18
|
} else {
|
|
19
|
-
|
|
19
|
+
const dependentName = releaseName, ///
|
|
20
|
+
dependentReleased = released, ///
|
|
21
|
+
dependencyReleasesVVerified = verifyDependencyReleases(releaseContext, dependentName, dependentReleased, releaseContextMap);
|
|
20
22
|
|
|
21
|
-
|
|
23
|
+
if (dependencyReleasesVVerified) {
|
|
24
|
+
const verified = releaseContext.isVerified();
|
|
22
25
|
|
|
23
|
-
|
|
24
|
-
|
|
26
|
+
if (verified) {
|
|
27
|
+
releaseVerified = true;
|
|
28
|
+
} else {
|
|
29
|
+
releaseContext.info(`Verifying the '${releaseName}' project...`);
|
|
25
30
|
|
|
26
|
-
|
|
31
|
+
const releaseFilesVerified = verifyReleaseFiles(releaseContext);
|
|
27
32
|
|
|
28
|
-
|
|
29
|
-
|
|
33
|
+
if (releaseFilesVerified) {
|
|
34
|
+
const verified = true;
|
|
35
|
+
|
|
36
|
+
releaseContext.setVerified(verified);
|
|
30
37
|
|
|
31
|
-
|
|
32
|
-
|
|
38
|
+
releaseVerified = verified; ///
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (releaseVerified) {
|
|
42
|
+
releaseContext.info(`...verified the '${releaseName}' project.`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
33
45
|
}
|
|
34
46
|
}
|
|
35
47
|
}
|
|
@@ -45,12 +57,12 @@ function verifyReleaseFiles(releaseContext) {
|
|
|
45
57
|
return releaseFilesVerified;
|
|
46
58
|
}
|
|
47
59
|
|
|
48
|
-
function verifyDependencyReleases(releaseContext, releaseContextMap) {
|
|
60
|
+
function verifyDependencyReleases(releaseContext, dependentName, dependentReleased, releaseContextMap) {
|
|
49
61
|
const dependencies = releaseContext.getDependencies(),
|
|
50
62
|
dependencyReleasesVVerified = dependencies.everyDependency((dependency) => {
|
|
51
63
|
const name = dependency.getName(),
|
|
52
64
|
releaseName = name, ///
|
|
53
|
-
releaseVerified = verifyRelease(releaseName, releaseContextMap);
|
|
65
|
+
releaseVerified = verifyRelease(releaseName, dependentName, dependentReleased, releaseContextMap);
|
|
54
66
|
|
|
55
67
|
if (releaseVerified) {
|
|
56
68
|
return true;
|