Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite7dee5c

Browse files
committed
Add code validator and Travis CI
1 parentef46369 commite7dee5c

File tree

10 files changed

+381
-48
lines changed

10 files changed

+381
-48
lines changed

‎.bin/batchFix.js

Lines changed: 0 additions & 45 deletions
This file was deleted.

‎.gitignore

Lines changed: 0 additions & 2 deletions
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

Lines changed: 3 additions & 0 deletions
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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
constpath=require('path');
2+
3+
constrootDir=path.resolve(__dirname,'..');
4+
constMAX_STEPS=100;
5+
6+
module.exports={
7+
rootDir,
8+
MAX_STEPS,
9+
};

‎.validate/index.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
constpath=require('path');
2+
constfs=require('fs-extra');
3+
4+
const{ listDirectories, listFiles}=require('./utils');
5+
const{ rootDir}=require('./constants');
6+
constvalidate={
7+
js:require('./js'),
8+
};
9+
10+
constcategories=listDirectories(rootDir).filter(dir=>dir!=='node_modules');
11+
lethasError=false;
12+
for(constcategoryofcategories){
13+
constcategoryDir=path.resolve(rootDir,category);
14+
constalgorithms=listDirectories(categoryDir);
15+
for(constalgorithmofalgorithms){
16+
constalgorithmDir=path.resolve(categoryDir,algorithm);
17+
constfiles=listFiles(algorithmDir);
18+
for(constfileoffiles){
19+
constext=file.split('.').pop();
20+
constvalidator=validate[ext];
21+
if(validator){
22+
constfilePath=path.resolve(algorithmDir,file);
23+
constcontent=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

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
constpath=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+
consterrors=[];
9+
consterror=message=>errors.push(message);
10+
constwarns=[];
11+
constwarn=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+
conststeps=Commander.commands.filter(command=>command.method==='delay').length;
20+
if(steps>MAX_STEPS){
21+
warn('Too many steps.');
22+
}
23+
if(!/\/\/importvisualizationlibraries{/.test(content)){
24+
error('Missing the code folding for importing visualization libraries.');
25+
}
26+
if(!/\/\/definetracervariables{/.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+
returnerrors.length===0;
40+
};

‎.validate/utils.js

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

‎README.md

Lines changed: 1 addition & 1 deletion
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)

[8]ページ先頭

©2009-2025 Movatter.jp