npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

elocuent

v0.0.3

Published

A command-line script to analyze the lines of code in your repo

Downloads

212

Readme

eʟᴏᴄuent

Node.js script to analyze lines of code in a (smallish) codebase and generate a CSV with stats about each line. It works by running git blame, then parsing the output.

Originally written as a package for students of MIT’s Interactive visualization & Society course to use in one of the labs, so it’s not very robust or flexible in the general case, but PRs are welcome.

Installation

npm install elocuent

You can also install globally:

npm install -g elocuent

Usage

Use all defaults:

npx elocuent

Use a custom glob for input

npx elocuent -i "src/**/*.js,!src/index.js"

Custom directory and file type (cannot be combined with -i/--input):

npx elocuent -d "src,static" -t "html,css,js,svelte"

Custom output file:

npx elocuent -o "loc.csv"

Spaces for indentation:

npx elocuent --spaces 2

All CLI Options

| Option | Description | Default | | --- | --- | --- | | -i, --input | Glob pattern for input files | | | -o, --output | Output file path. Any directories need to exist or you’ll get an error. | loc.csv | | -d, --dir | Comma-separated list of directories to search. Will be ignored if -i/--input is present. | src | | -t, --types | Comma-separated list of file types to search. Will be ignored if -i/--input is present. | html,css,js,svelte | | -s, --spaces | If using spaces for indentation, number of spaces to use | false (use tabs) | | --verbose | Show verbose output | | | --dry-run | Do not write to file. Also enables verbose output | | | --blame-out | Path to a file to write the output of git blame to. Useful for debugging. | | | -h, --help | Show help | |

CSV Metadata

The metadata stored in the CSV is:

| Field | Description | | --- | --- | | file | The file the line is from | | line | The line number | | type | The type of code ("html", "css", "js", "svelte") | | commit | The identifier (SHA hash) of the commit that last changed this line | | date | The date the commit was made | | time | The time the commit was made | | timezone | The timezone the commit was made | | datetime | The full date and time (including timezone) in ISO 8601 format | | author | The full name of the author of the last commit that changed this line | | depth | The indentation level of the line | | length | The number of characters in the line after trimming (i.e. excluding whitespace at the start and end) |

JS API

You can also use eʟᴏᴄuent as a JS module:

import elocuent from "elocuent";

elocuent({
	input: "src/**/*.js,!src/index.js",
	output: "loc.csv",
	spaces: 2
});