Skip to content

Commit e7dee5c

Browse files
committed
Add code validator and Travis CI
1 parent ef46369 commit e7dee5c

File tree

10 files changed

+381
-48
lines changed

10 files changed

+381
-48
lines changed

‎.bin/batchFix.js

-45
This file was deleted.

‎.gitignore

-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
/.idea
22
/node_modules
33
/npm-debug.log
4-
/package.json
5-
/package-lock.json
64
.DS_Store

‎.travis.yml

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
language: node_js
2+
node_js: 'stable'
3+
cache: npm

‎.validate/constants.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const path = require('path');
2+
3+
const rootDir = path.resolve(__dirname, '..');
4+
const MAX_STEPS = 100;
5+
6+
module.exports = {
7+
rootDir,
8+
MAX_STEPS,
9+
};

‎.validate/index.js

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
const path = require('path');
2+
const fs = require('fs-extra');
3+
4+
const { listDirectories, listFiles } = require('./utils');
5+
const { rootDir } = require('./constants');
6+
const validate = {
7+
js: require('./js'),
8+
};
9+
10+
const categories = listDirectories(rootDir).filter(dir => dir !== 'node_modules');
11+
let hasError = false;
12+
for (const category of categories) {
13+
const categoryDir = path.resolve(rootDir, category);
14+
const algorithms = listDirectories(categoryDir);
15+
for (const algorithm of algorithms) {
16+
const algorithmDir = path.resolve(categoryDir, algorithm);
17+
const files = listFiles(algorithmDir);
18+
for (const file of files) {
19+
const ext = file.split('.').pop();
20+
const validator = validate[ext];
21+
if (validator) {
22+
const filePath = path.resolve(algorithmDir, file);
23+
const content = fs.readFileSync(filePath, 'utf-8');
24+
if (!validator(category, algorithm, file, content)) {
25+
hasError = true;
26+
}
27+
}
28+
}
29+
}
30+
}
31+
32+
process.exit(hasError ? 1 : 0);

‎.validate/js/index.js

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
const path = require('path');
2+
const { Commander } = require('algorithm-visualizer');
3+
const { rootDir } = require('../constants');
4+
const { signale } = require('../utils');
5+
const { MAX_STEPS } = require('../constants');
6+
7+
module.exports = (category, algorithm, file, content) => {
8+
const errors = [];
9+
const error = message => errors.push(message);
10+
const warns = [];
11+
const warn = message => warns.push(message);
12+
13+
try {
14+
Commander.init();
15+
require(path.resolve(rootDir, category, algorithm, file));
16+
} catch (e) {
17+
error(e);
18+
}
19+
const steps = Commander.commands.filter(command => command.method === 'delay').length;
20+
if (steps > MAX_STEPS) {
21+
warn('Too many steps.');
22+
}
23+
if (!/\/\/ import visualization libraries {/.test(content)) {
24+
error('Missing the code folding for importing visualization libraries.');
25+
}
26+
if (!/\/\/ define tracer variables {/.test(content)) {
27+
error('Missing the code folding for defining tracer variables.');
28+
}
29+
if (!/\/\/ visualize {/.test(content)) {
30+
error('Missing the code folding for visualizing.');
31+
}
32+
33+
if (errors.length || warns.length) {
34+
signale.log(`${category}/${algorithm}/${file}`);
35+
warns.forEach(error => signale.warn(error));
36+
errors.forEach(error => signale.error(error));
37+
signale.log();
38+
}
39+
return errors.length === 0;
40+
};

‎.validate/utils.js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
const path = require('path');
2+
const fs = require('fs-extra');
3+
const { Signale } = require('signale');
4+
5+
function isDirectory(dirPath) {
6+
return fs.lstatSync(dirPath).isDirectory();
7+
}
8+
9+
function listFiles(dirPath) {
10+
return fs.pathExistsSync(dirPath) ? fs.readdirSync(dirPath).filter(fileName => !fileName.startsWith('.')) : [];
11+
}
12+
13+
function listDirectories(dirPath) {
14+
return listFiles(dirPath).filter(fileName => isDirectory(path.resolve(dirPath, fileName)));
15+
}
16+
17+
const signale = new Signale();
18+
19+
module.exports = {
20+
isDirectory,
21+
listFiles,
22+
listDirectories,
23+
signale,
24+
};

‎README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Algorithms
1+
# Algorithms [![Travis (.com)](https://img.shields.io/travis/com/algorithm-visualizer/algorithms.svg?style=flat-square)](https://travis-ci.com/algorithm-visualizer/algorithms)
22

33
> This repository is part of the project [Algorithm Visualizer](https://github.com/algorithm-visualizer).
44

0 commit comments

Comments
 (0)