Skip to content
This repository has been archived by the owner on Apr 24, 2024. It is now read-only.

Commit

Permalink
Merge pull request #151 from hcodes/merged_options
Browse files Browse the repository at this point in the history
Options refactoring
  • Loading branch information
hcodes committed Apr 4, 2020
2 parents 5f12468 + 57e311c commit 6a14736
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 53 deletions.
2 changes: 2 additions & 0 deletions lib/cli/actions.js
Expand Up @@ -15,6 +15,8 @@ function cliActionInit() {
fs.writeFileSync(yrc, jsonStringify(defaultConfig));
consoleInfo(`Successfully created ${yrc} file in ${process.cwd()}`);
}

process.exit();
}

module.exports = {
Expand Down
53 changes: 10 additions & 43 deletions lib/cli/index.js
Expand Up @@ -4,17 +4,15 @@ const async = require('async');
const chalk = require('chalk');
const program = require('commander');

const { apiOptions, setCliOptions } = require('./options');
const { cliActionInit } = require('./actions');
const { defaultConfig } = require('../config');
const dictionary = require('../dictionary');
const { setCliOptions, getMergedOptions } = require('./options');
const reports = require('../reports');
const tasks = require('../tasks');

const { prepareRegExpToIgnoreText } = require('../helpers/ignore');
const { getConfig, defaultConfig } = require('../config');
const { setDebugMode } = require('../helpers/debug');

const { cliActionInit } = require('./actions');

setCliOptions(defaultConfig);
program.parse(process.argv);

Expand All @@ -23,59 +21,28 @@ if (!program.colors) {
chalk.level = 0;
}

const jsonConfig = getConfig(program.config);
const json = Object.assign({}, defaultConfig, jsonConfig.data);

const settings = {
excludeFiles: json.excludeFiles,
options: json.options || {}
};

[
'checkYo',
'fileExtensions',
'format',
'ignoreTags',
'ignoreText',
'lang',
'maxRequests'
].forEach(function(key) {
settings[key] = program[key] || json[key];
});

settings.ignoreText = prepareRegExpToIgnoreText(settings.ignoreText);

apiOptions.forEach(option => {
const key = option[0];
if (program[key]) {
settings.options[key] = true;
} else if (typeof json[key] !== 'undefined') {
settings.options[key] = json[key];
}
});

dictionary.loadDictionaries(program.dictionary, json.dictionary);
const mergedOptions = getMergedOptions(program.config);

reports.addReports(program.report || json.report);
dictionary.loadDictionaries(program.dictionary, mergedOptions.configDictionary);

if (program.init) {
cliActionInit();
process.exit();
}

const isStdin = program.stdin;
if (!isStdin && !program.args.length) {
program.help();
}

reports.addReports(mergedOptions.report);
reports.onStart();

async.series(
isStdin ?
tasks.forStdin(settings, program.stdinFilename) :
tasks.forResources(program.args, settings),
function() {
reports.onComplete(jsonConfig.relativePath);
tasks.forStdin(program.stdinFilename, mergedOptions) :
tasks.forResources(program.args, mergedOptions),
() => {
reports.onComplete(mergedOptions.configRelativePath);
process.exit();
}
);
44 changes: 43 additions & 1 deletion lib/cli/options.js
Expand Up @@ -2,6 +2,9 @@

const program = require('commander');

const { getMergedConfig } = require('../config');

const { prepareRegExpToIgnoreText } = require('../helpers/ignore');
const { kebabCase, splitTrim, splitByCommas } = require('../helpers/string');
const { packageJson } = require('../helpers/package');

Expand Down Expand Up @@ -45,7 +48,46 @@ function setCliOptions(defaultConfig) {
});
}

function getMergedOptions(config) {
const mergedConfig = getMergedConfig(config);

const mergedOptions = {
excludeFiles: mergedConfig.excludeFiles,
options: mergedConfig.options || {},

configDictionary: mergedOptions.dictionary,
configRelativePath: mergedConfig.configRelativePath,
};

[
'checkYo',
'fileExtensions',
'format',
'ignoreTags',
'ignoreText',
'lang',
'maxRequests',
'report',
].forEach(function(key) {
mergedOptions[key] = program[key] || mergedConfig[key];
});

mergedOptions.ignoreText = prepareRegExpToIgnoreText(mergedOptions.ignoreText);

apiOptions.forEach(option => {
const key = option[0];
if (program[key]) {
mergedOptions.options[key] = true;
} else if (typeof mergedConfig[key] !== 'undefined') {
mergedOptions.options[key] = mergedConfig[key];
}
});

return mergedOptions;
}

module.exports = {
setCliOptions,
apiOptions,
getMergedOptions,
setCliOptions,
};
19 changes: 17 additions & 2 deletions lib/config/index.js
Expand Up @@ -72,9 +72,23 @@ function getConfig(file) {
};
}

/**
* Get merged config.
*
* @param {string} filename
* @returns {Object}
*/
function getMergedConfig(filename) {
const config = getConfig(filename);

return Object.assign({
configRelativePath: config.relativePath,
}, defaultConfig, config.data);
}

/**
* Check config properties.
*
*
* @param {*} obj
* @param {string|undefined} file
*/
Expand All @@ -97,6 +111,7 @@ function checkConfigProperties(obj, file) {
}

module.exports = {
getConfig,
defaultConfig,
getConfig,
getMergedConfig,
};
10 changes: 5 additions & 5 deletions lib/dictionary.js
Expand Up @@ -31,7 +31,7 @@ class Dictionary {
/**
* Get dictionary.
*
* @returns {Array}
* @returns {RegExp[]}
*/
get() {
return this.dict;
Expand All @@ -41,7 +41,7 @@ class Dictionary {
* Load dictionary.
*
* @param {string} file - JSON file.
* @returns {Array}
* @returns {string[]}
*/
loadDictionary(file) {
let data = [];
Expand All @@ -63,8 +63,8 @@ class Dictionary {
/**
* Load dictionaries.
*
* @param {Array} files
* @param {Array} configDictionary - Dictionary from .yaspellerrc
* @param {string[]} files
* @param {string[]} configDictionary - Dictionary from .yaspellerrc
*/
loadDictionaries(files, configDictionary) {
let count = 0;
Expand Down Expand Up @@ -175,7 +175,7 @@ class Dictionary {
* Prepare dictionary words.
*
* @param {string[]} dictionaryWords
* @returns {Array}
* @returns {RegExp[]}
*/
prepareDictionaryWords(dictionaryWords) {
const result = [];
Expand Down
4 changes: 2 additions & 2 deletions lib/tasks.js
Expand Up @@ -84,11 +84,11 @@ module.exports = {
/**
* Prepare task for stdin.
*
* @param {string} filename
* @param {Object} settings
* @param {string} [filename]
* @returns {Array}
*/
forStdin(settings, filename) {
forStdin(filename, settings) {
return [function(callback) {
let text = '';

Expand Down

0 comments on commit 6a14736

Please sign in to comment.