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

Options refactoring #151

Merged
merged 1 commit into from Apr 4, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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