Skip to content

Commit b2acd8f

Browse files
author
Benjamin Pasero
committed
sandbox - make layers checker fit to complain about native things definedin common layer
1 parent f751359 commit b2acd8f

2 files changed

Lines changed: 104 additions & 1 deletion

File tree

build/lib/layersChecker.js

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,13 @@ const CORE_TYPES = [
5353
'trimLeft',
5454
'trimRight'
5555
];
56+
// Types that are defined in a common layer but are known to be only
57+
// available in native environments should not be allowed in browser
58+
const NATIVE_TYPES = [
59+
'NativeParsedArgs',
60+
'INativeEnvironmentService',
61+
'INativeWindowConfiguration'
62+
];
5663
const RULES = [
5764
// Tests: skip
5865
{
@@ -68,6 +75,37 @@ const RULES = [
6875
'MessageEvent',
6976
'data'
7077
],
78+
disallowedTypes: NATIVE_TYPES,
79+
disallowedDefinitions: [
80+
'lib.dom.d.ts',
81+
'@types/node' // no node.js
82+
]
83+
},
84+
// Common: vs/platform/environment/common/argv.ts
85+
{
86+
target: '**/vs/platform/environment/common/argv.ts',
87+
disallowedTypes: [ /* Ignore native types that are defined from here */],
88+
allowedTypes: CORE_TYPES,
89+
disallowedDefinitions: [
90+
'lib.dom.d.ts',
91+
'@types/node' // no node.js
92+
]
93+
},
94+
// Common: vs/platform/environment/common/environment.ts
95+
{
96+
target: '**/vs/platform/environment/common/environment.ts',
97+
disallowedTypes: [ /* Ignore native types that are defined from here */],
98+
allowedTypes: CORE_TYPES,
99+
disallowedDefinitions: [
100+
'lib.dom.d.ts',
101+
'@types/node' // no node.js
102+
]
103+
},
104+
// Common: vs/platform/windows/common/windows.ts
105+
{
106+
target: '**/vs/platform/windows/common/windows.ts',
107+
disallowedTypes: [ /* Ignore native types that are defined from here */],
108+
allowedTypes: CORE_TYPES,
71109
disallowedDefinitions: [
72110
'lib.dom.d.ts',
73111
'@types/node' // no node.js
@@ -81,6 +119,7 @@ const RULES = [
81119
// Safe access to global
82120
'global'
83121
],
122+
disallowedTypes: NATIVE_TYPES,
84123
disallowedDefinitions: [
85124
'lib.dom.d.ts',
86125
'@types/node' // no node.js
@@ -90,6 +129,7 @@ const RULES = [
90129
{
91130
target: '**/vs/**/common/**',
92131
allowedTypes: CORE_TYPES,
132+
disallowedTypes: NATIVE_TYPES,
93133
disallowedDefinitions: [
94134
'lib.dom.d.ts',
95135
'@types/node' // no node.js
@@ -99,6 +139,7 @@ const RULES = [
99139
{
100140
target: '**/vs/**/browser/**',
101141
allowedTypes: CORE_TYPES,
142+
disallowedTypes: NATIVE_TYPES,
102143
disallowedDefinitions: [
103144
'@types/node' // no node.js
104145
]
@@ -107,6 +148,7 @@ const RULES = [
107148
{
108149
target: '**/src/vs/editor/contrib/**',
109150
allowedTypes: CORE_TYPES,
151+
disallowedTypes: NATIVE_TYPES,
110152
disallowedDefinitions: [
111153
'@types/node' // no node.js
112154
]
@@ -162,14 +204,20 @@ let hasErrors = false;
162204
function checkFile(program, sourceFile, rule) {
163205
checkNode(sourceFile);
164206
function checkNode(node) {
165-
var _a;
207+
var _a, _b;
166208
if (node.kind !== ts.SyntaxKind.Identifier) {
167209
return ts.forEachChild(node, checkNode); // recurse down
168210
}
169211
const text = node.getText(sourceFile);
170212
if ((_a = rule.allowedTypes) === null || _a === void 0 ? void 0 : _a.some(allowed => allowed === text)) {
171213
return; // override
172214
}
215+
if ((_b = rule.disallowedTypes) === null || _b === void 0 ? void 0 : _b.some(disallowed => disallowed === text)) {
216+
const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
217+
console.log(`[build/lib/layersChecker.ts]: Reference to '${text}' violates layer '${rule.target}' (${sourceFile.fileName} (${line + 1},${character + 1})`);
218+
hasErrors = true;
219+
return;
220+
}
173221
const checker = program.getTypeChecker();
174222
const symbol = checker.getSymbolAtLocation(node);
175223
if (symbol) {

build/lib/layersChecker.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ const CORE_TYPES = [
5555
'trimRight'
5656
];
5757

58+
// Types that are defined in a common layer but are known to be only
59+
// available in native environments should not be allowed in browser
60+
const NATIVE_TYPES = [
61+
'NativeParsedArgs',
62+
'INativeEnvironmentService',
63+
'INativeWindowConfiguration'
64+
];
65+
5866
const RULES = [
5967

6068
// Tests: skip
@@ -73,6 +81,40 @@ const RULES = [
7381
'MessageEvent',
7482
'data'
7583
],
84+
disallowedTypes: NATIVE_TYPES,
85+
disallowedDefinitions: [
86+
'lib.dom.d.ts', // no DOM
87+
'@types/node' // no node.js
88+
]
89+
},
90+
91+
// Common: vs/platform/environment/common/argv.ts
92+
{
93+
target: '**/vs/platform/environment/common/argv.ts',
94+
disallowedTypes: [/* Ignore native types that are defined from here */],
95+
allowedTypes: CORE_TYPES,
96+
disallowedDefinitions: [
97+
'lib.dom.d.ts', // no DOM
98+
'@types/node' // no node.js
99+
]
100+
},
101+
102+
// Common: vs/platform/environment/common/environment.ts
103+
{
104+
target: '**/vs/platform/environment/common/environment.ts',
105+
disallowedTypes: [/* Ignore native types that are defined from here */],
106+
allowedTypes: CORE_TYPES,
107+
disallowedDefinitions: [
108+
'lib.dom.d.ts', // no DOM
109+
'@types/node' // no node.js
110+
]
111+
},
112+
113+
// Common: vs/platform/windows/common/windows.ts
114+
{
115+
target: '**/vs/platform/windows/common/windows.ts',
116+
disallowedTypes: [/* Ignore native types that are defined from here */],
117+
allowedTypes: CORE_TYPES,
76118
disallowedDefinitions: [
77119
'lib.dom.d.ts', // no DOM
78120
'@types/node' // no node.js
@@ -88,6 +130,7 @@ const RULES = [
88130
// Safe access to global
89131
'global'
90132
],
133+
disallowedTypes: NATIVE_TYPES,
91134
disallowedDefinitions: [
92135
'lib.dom.d.ts', // no DOM
93136
'@types/node' // no node.js
@@ -98,6 +141,7 @@ const RULES = [
98141
{
99142
target: '**/vs/**/common/**',
100143
allowedTypes: CORE_TYPES,
144+
disallowedTypes: NATIVE_TYPES,
101145
disallowedDefinitions: [
102146
'lib.dom.d.ts', // no DOM
103147
'@types/node' // no node.js
@@ -108,6 +152,7 @@ const RULES = [
108152
{
109153
target: '**/vs/**/browser/**',
110154
allowedTypes: CORE_TYPES,
155+
disallowedTypes: NATIVE_TYPES,
111156
disallowedDefinitions: [
112157
'@types/node' // no node.js
113158
]
@@ -117,6 +162,7 @@ const RULES = [
117162
{
118163
target: '**/src/vs/editor/contrib/**',
119164
allowedTypes: CORE_TYPES,
165+
disallowedTypes: NATIVE_TYPES,
120166
disallowedDefinitions: [
121167
'@types/node' // no node.js
122168
]
@@ -181,6 +227,7 @@ interface IRule {
181227
skip?: boolean;
182228
allowedTypes?: string[];
183229
disallowedDefinitions?: string[];
230+
disallowedTypes?: string[];
184231
}
185232

186233
let hasErrors = false;
@@ -199,6 +246,14 @@ function checkFile(program: ts.Program, sourceFile: ts.SourceFile, rule: IRule)
199246
return; // override
200247
}
201248

249+
if (rule.disallowedTypes?.some(disallowed => disallowed === text)) {
250+
const { line, character } = sourceFile.getLineAndCharacterOfPosition(node.getStart());
251+
console.log(`[build/lib/layersChecker.ts]: Reference to '${text}' violates layer '${rule.target}' (${sourceFile.fileName} (${line + 1},${character + 1})`);
252+
253+
hasErrors = true;
254+
return;
255+
}
256+
202257
const checker = program.getTypeChecker();
203258
const symbol = checker.getSymbolAtLocation(node);
204259
if (symbol) {

0 commit comments

Comments
 (0)