line-counter-node

1.5.1 • Public • Published

Node line counter

Build Status npm npm npm

Line counter is a node library that traverses a directory tree recursively to find all files with specific extensions (which is specified by user) and returns the total line count of matched files.

Installation

LineCounter is a npm library and it can be installed as following

npm install -g line-counter-node

CLI Usage

After installing LineCounter, binary file will be added to path. You can run the script as linecounter or lc.

Options

  • -v, --version: Show current version of linecounter
  • -h, --help: Shows available commands with descriptions

Methods

  • count: Scans given directory recursively and returns lines of founded files
    • -v, --verbose: Shows accepted, ignored files and directories
    • -p, --path: The directory path which will be used as starting point. If path is not specified then target directory will be current directory
    • -e, --extensions: Comma separated extension list. Only the files with given extensions will be counted
    • -i, --except: Comma separated extension list which will be ignored
    • -r, --rules: Additional rules. See available rules section for rule list
    • -s, --save: Saves all options except path so that it can be reused again. Configuration file path $HOME/.linecounter.json
    • -c, --config: Uses a saved configuration. All options except path will be used from given configuration
  • config: Lists, shows and removes available configurations
    • -l, --list: Displays all saved configurations
    • -s, --show: Shows a saved configuration's details
    • -r, --remove: Removes a saved configuration
    • -d, --destroy: Removes all configurations by removing configuration file

Basic Usage

There are 2 ways to use options.

  • Full name: Option name must start with double dashes (--) and equal operator (=) is required to assign a value to the option. Example --optionName=value or --optionWithoutValue
  • Alias: Option name must start with a single dash character (-) and a single space is required between option name and value to assign a value to the option. Example: -o value or -o
linecounter [globalOptions] [method] [methodOptions]
lc [globalOptions] [method] [methodOptions]  # lc is alias of linecounter

Options Usage

linecounter # Same with --help
linecounter --version
linecounter --help

Count Method Usage

linecounter count --path="/var/www/html" --verbose # All files will be counted and printed under the current directory
linecounter count --extensions="comma, separated, extensions"
linecounter count --except="js"  # All files except the files with js extension will be counted
linecounter count --rules="ignoreDir(node_modules)"
lineCounter count --rules="ignoreHidden|filePostfix(test)"  # multiple rule usage. Separate rules with | character
linecounter count -p "path/to/directory" -r "ignoreDir(node_modules,tests,lib,src)"   # multiple aguments with one rule usage
linecounter count -e "comma, separated, extensions" -r "ignoreDir(node_modules,tests,lib,src)" -v --save="myConfiguration" # Saves options
linecounter count --config="myConfiguration" # Following options will be used: -e "comma, separated, extensions" -r "ignoreDir(node_modules,tests,lib,src)" -v

Config Method Usage

linecounter config --list
linecounter config --show=myConfiguration # Shows details of myConfiguration
linecounter config --remove=myConfiguration # Removes myConfiguration
linecounter config --destroy

Example Output of Count (without --verbose option)

Total files: 755
Total lines: 338203

API Usage

LineCounter

const LineCounter = require("line-counter-node").LineCounter;
var lc = new LineCounter();

Methods

  • lc.setPath(path: string) // Sets current directory path which will be traversed
  • lc.setExtensions(ext: Extensions) // Specify allowed/disallowed extensions. Set null (or never set anything) to disable extension filter and target all files with all extensions
  • lc.resolveTargetFiles() // Traverses and returns target files as File array
  • lc.getLines(callback: Function) // Returns total files and total lines. Result is a json object like { files: 15, lines: 7854 }
  • lc.getExtensions() // Returns current Extensions object
  • lc.clearExtensions() // Resets Extensions rules
  • lc.setRules(rules: Array) // Overrides existing rules with new ones
  • lc.addRule(rule: Function, arg1, arg2, ...) // Adds new rule
  • lc.clearRules() // Resets all rules
  • lc.on(eventName: String, args1, arg2...) // Bind event listeners

Creating custom rule

// Name is file or directory name without path. Stats is fs.Stats. Arguments are unlimited and depends on the rule
function customRule(name, stats, arg1, arg2, arg3, ...){
    if( want file or directory to count ){
        return true;
    }
    else{
        return false;
    }
}

Events

const Events = require("line-counter-node").Events;
  • Events.ERROR // Cause: If given path is invalid or some file or directory could not read. Arg: error message
  • Events.FILE_ACCEPTED // Cause: If if a file is accepted while scanning files. Arg: file path
  • Events.DIR_ACCEPTED // Cause: If if a directory is accepted while scanning files. Arg: file path
  • Events.FILE_IGNORED // Cause: If if a file is ignored while scanning files. Arg: file path
  • Events.DIR_IGNORED // Cause: If if a directory is ignored while scanning files. Arg: file path
  • Events.FILE_PROCESSED // Cause: File is counted successfully. Arg: {totalFiles: int, completedFiles: int, path: string, lines: int(for current file)}

ExtensionsFactory

From method allows user to specify the allowed extensions. Only given extensions will be counted

const ExtensionsFactory = require("line-counter-node").ExtensionsFactory;
var ext = ExtensionsFactory.from("js, php, java");  // Comma separated extension list
var ext = ExtensionsFactory.from(["js", "php", "java"]); // Array with extensions

Except method allows user to specify disallowed extensions. All other extensions will be counted except given extensions

const ExtensionsFactory = require("line-counter-node").ExtensionsFactory;
var ext = ExtensionsFactory.except("js, php, java");  // Comma separated extension list
var ext = ExtensionsFactory.except(["js", "php", "java"]); // Array with extensions

Rules

Available Rules

const Rules = require("line-counter-node").Rules;
  • Rules.filePrefix // Name prefix rule
  • Rules.filePostfix // Name postfix rule (without extension)
  • Rules.fileIgnorePrefix // Name ignore prefix rule
  • Rules.fileIgnorePostfix // Name ignore postfix rule
  • Rules.ignoreFile // Ignore multiple files
  • Rules.ignoreDir // Ignore multiple directories
  • Rules.ignoreHidden // Ignores dotfiles and dotfolders (.git, .idea, .gitignore...)
  • Rules.regex // Regular expression rule. Allows only the matched file or directories
  • Rules.ignoreExt // Ignore multiple extensions
  • Rules.dev // Developer rule. Ignored dot files, some extensions (md, iml, yml, ...) and some vendor directories (node_modules, bower_components, ...)

Example Usage

const ExtensionsFactory = require("line-counter-node").ExtensionsFactory;
const LineCounter = require("line-counter-node").LineCounter;
const Rules = require("line-counter-node").Rules;
const Events = require("line-counter-node").Events;
var lc = new LineCounter();
lc.setPath("/var/www/html/");
lc.setExtensions(ExtensionsFactory.from("js"));
lc.addRule(Rules.ignoreDir, ".git", ".idea", "node_modules");  // Ignores given directories
lc.addRule(Rules.filePrefix, "line");   // Only the file names starts with "line" are allowed, others will be ignored
lc.on(Events.ERROR, function(err){
    console.error(err);
});
lc.getLines(function(result){
    console.log("Total files: " + result.files);
    console.log("Total lines: " + result.lines);
});

Package Sidebar

Install

npm i line-counter-node

Weekly Downloads

0

Version

1.5.1

License

MIT

Last publish

Collaborators

  • osenekci