qqd
v1.6.0
Published
Quick-and-dirty debugging output for tired programmers
Downloads
7
Maintainers
Readme
⚡ Quick-and-dirty debugging output for tired JS programmers
What is Q
q
is a better way to do print statement debugging.Use
q
instead ofconsole.log
and your variables will be nicely printed in$TMPDIR/q
.
Sample output of using q()
Why is this better than console.log
?
- :zap: Faster to type
- :bento: Pretty-printed vars and expressions
- :mag: Easier to see inside objects
- :see_no_evil: Does not go to noisy-ass stdout. It goes to
$TMPDIR/q
. - :art: Pretty colors!
Bonus points:
- Provide a type definition for completion in IDE
- Honor NO_COLOR environment variable to disable coloring
Changelog
See CHANGELOG.md
Install
npm install qqd
Tips: qqd
is for "Q is Quick Debugging".
Usage
const { q } = require("qqd");
q(a, b, c);
// Or shorter
require("qqd").q(a, b, c);
Then tail the q
file:
tail -f $TMPDIR/q
# Or if $TMPDIR is not defined:
tail -f /tmp/q
For best results, dedicate a terminal to tailing $TMPDIR/q
while you work, or see below the Shell integration.
Shell Integration
To quickly open the Q file and clearing it, add this two functions to your shell.
Note that there is also a ZSH Plugin, see the instructions below.
These two functions allows you to quickly tail Q, or to empty the Q file and tail it:
$ qq
Tailing Q log...
06:14:11 foobar
$ rmqq # File is emptied before
Tailing Q log...
ZSH Plugin for Q
The ZSH Plugin for Q adds the two functions, qq
and rmqq
, as seen above to your shell.
Usage with Zgen (or any ZSH plugin manager):
zgen load tomsquest/q.plugin.zsh
Then you can:
$ qq
Tailing Q log...
06:14:11 foobar
$ rmqq # File is emptied before
Tailing Q log...
Editor integrations
Jetbrains Intellij and Webstorm
For JavaScript:
- In
Settings
- Open
Editor
>Live Templates
- In
JavaScript
, add a new template - Click on
Define
next toNo applicable contexts yet
and pickJavaScript and TypeScript
- Set:
- Abbreviation:
q
- Description:
Pretty-print with Q
- Template Text:
q($VAR$);
- Abbreviation:
- Open
Edit variables
and pickcompleteSmart()
in theExpression
column - Press
OK
For TypeScript:
- In
Settings
- Open
Editor
>Live Templates
- Click on the
+
icon and select >Template Group
and fill "TypeScript" - Go to the newly created group
TypeScript
, add a new template - Click on
Define
next toNo applicable contexts yet
and pickTypeScript
- Set:
- Abbreviation:
q
- Description:
Pretty-print with Q
- Template Text:
q($VAR$);
- Abbreviation:
- Open
Edit variables
and pickcompleteSmart()
in theExpression
column - Press
OK
Sample usage
Here, by pressing q
, I can select the first, or the second option:
FAQ
Haven't I seen this somewhere before?
Python programmers will recognize this as a Javascript port of the q
module by zestyping.
Go programmers will recognize this as a port of the q
module by y0ssar1an.
Ping does a great job of explaining q
in his awesome lightning talk from PyCon 2013. Watch it! It's funny :)
Why q
?
Because q
is quick to type ⚡⚡⚡.
Why the npm module is called qqd
?
On NPM, the q
, dd
("dirty debug") and even qdd
("quick dirty debug") were already published.qqd
seems to be a good choice, short and meaning Q is Quick Debugging.
Is q
safe for concurrent use?
Yes. Q uses fs.writeFileSync()
so the writes are synchronous/blocking.
What about production?
Q does not do anything if NODE_ENV is production
.
This is for safety: you do not want Q to write stuff when running in production.
Still, it is advised to prevent shipping any calls to Q before shipping code (like you could to for console.log
).
How to prevent calls to Q in production?
With ESLint, add the "Disallow specific imports (no-restricted-imports)" rules to an existing .eslintrc.js
:
"no-restricted-imports": ["error", "qqd"]
Alternative for Node.js, the ESLint Node plugin provides two rules:
Haven't I seen this README somewhere before?
Yes, it is largely inspired by the very good README of the q
module by y0ssar1an.