Socket
Socket
Sign inDemoInstall

remark-lint-no-shell-dollars

Package Overview
Dependencies
Maintainers
3
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

remark-lint-no-shell-dollars - npm Package Compare versions

Comparing version 3.1.2 to 4.0.0

index.d.ts.map

14

index.d.ts

@@ -1,7 +0,7 @@

export default remarkLintNoShellDollars
export type Root = import('mdast').Root
declare const remarkLintNoShellDollars: import('unified').Plugin<
void[] | [unknown],
import('mdast').Root,
import('mdast').Root
>
export default remarkLintNoShellDollars;
export type Root = import('mdast').Root;
declare const remarkLintNoShellDollars: {
(config?: unknown): ((tree: import("mdast").Root, file: import("vfile").VFile, next: import("unified").TransformCallback<import("mdast").Root>) => undefined) | undefined;
readonly name: string;
};
//# sourceMappingURL=index.d.ts.map
/**
* remark-lint rule to warn when every line in shell code is preceded by `$`s.
*
* ## What is this?
*
* This package checks for `$` markers prefixing shell code,
* which are hard to copy/paste.
*
* ## When should I use this?
*
* You can use this package to check that not all lines in shell code are
* preceded by dollars (`$`).
* You can use this package to check shell code blocks.
*
* ## API
*
* ### `unified().use(remarkLintNoShellDollars)`
*
* Warn when every line in shell code is preceded by `$`s.
*
* ###### Parameters
*
* There are no options.
*
* ###### Returns
*
* Transform ([`Transformer` from `unified`][github-unified-transformer]).
*
* ## Recommendation
*
* Dollars make copy/pasting hard.
* Either put both dollars in front of some lines (to indicate shell commands)
* and don’t put them in front of other lines, or use fenced code to indicate
* shell commands on their own, followed by another fenced code that contains
* just the output.
* Either put dollars in front of some lines (commands) and don’t put them in
* front of other lines (output),
* or use different code blocks for commands and output.
*
* [api-remark-lint-no-shell-dollars]: #unifieduseremarklintnoshelldollars
* [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer
*
* @module no-shell-dollars
* @summary
* remark-lint rule to warn every line in shell code is preceded by `$`s.
* @author Titus Wormer
* @copyright 2015 Titus Wormer
* @license MIT
*
* @example

@@ -29,23 +46,21 @@ * {"name": "ok.md"}

* ```bash
* echo a
* echo "Mercury and Venus"
* ```
*
* ```sh
* echo a
* echo a > file
* echo "Mercury and Venus"
* echo "Earth and Mars" > file
* ```
*
* Mixed dollars for input lines and without for output is also OK:
*
* ```zsh
* $ echo a
* a
* $ echo a > file
* $ echo "Mercury and Venus"
* Mercury and Venus
* $ echo "Earth and Mars" > file
* ```
*
* Some empty code:
*
* ```command
* ```
*
* It’s fine to use dollars in non-shell code.
*
* ```js

@@ -56,18 +71,18 @@ * $('div').remove()

* @example
* {"name": "not-ok.md", "label": "input"}
* {"label": "input", "name": "not-ok.md"}
*
* ```sh
* $ echo a
* $ echo "Mercury and Venus"
* ```
*
* ```bash
* $ echo a
* $ echo a > file
* $ echo "Mercury and Venus"
* $ echo "Earth and Mars" > file
* ```
*
* @example
* {"name": "not-ok.md", "label": "output"}
* {"label": "output", "name": "not-ok.md"}
*
* 1:1-3:4: Do not use dollar signs before shell commands
* 5:1-8:4: Do not use dollar signs before shell commands
* 1:1-3:4: Unexpected shell code with every line prefixed by `$`, expected different code for input and output
* 5:1-8:4: Unexpected shell code with every line prefixed by `$`, expected different code for input and output
*/

@@ -79,20 +94,34 @@

import {collapseWhiteSpace} from 'collapse-white-space'
import {phrasing} from 'mdast-util-phrasing'
import {lintRule} from 'unified-lint-rule'
import {visit} from 'unist-util-visit'
import {generated} from 'unist-util-generated'
import {SKIP, visitParents} from 'unist-util-visit-parents'
// List of shell script file extensions (also used as code flags for syntax
// highlighting on GitHub):
// See: <https://github.com/github/linguist/blob/40992ba/lib/linguist/languages.yml#L4984>
// See: <https://github.com/wooorm/starry-night/blob/a3e35db/lang/source.shell.js#L8>
const flags = new Set([
'sh',
// Extensions.
'bash',
'bats',
'cgi',
'command',
'fcgi',
'csh',
'ebuild',
'eclass',
'ksh',
'sh',
'sh.in',
'tcsh',
'tmux',
'tool',
'zsh'
'zsh',
'zsh-theme',
// Names (w/o extensions).
'abuild',
'alpine-abuild',
'apkbuild',
'gentoo-ebuild',
'gentoo-eclass',
'openrc',
'openrc-runscript',
'shell',
'shell-script'
])

@@ -105,25 +134,47 @@

},
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
visit(tree, 'code', (node) => {
// Check both known shell code and unknown code.
if (!generated(node) && node.lang && flags.has(node.lang)) {
const lines = node.value
.split('\n')
.filter((line) => line.trim().length > 0)
/**
* @param {Root} tree
* Tree.
* @returns {undefined}
* Nothing.
*/
function (tree, file) {
visitParents(tree, function (node, parents) {
// Do not walk into phrasing.
if (phrasing(node)) {
return SKIP
}
if (
node.type === 'code' &&
node.position &&
// Check known shell code.
node.lang &&
flags.has(node.lang)
) {
const lines = node.value.split('\n')
let index = -1
if (lines.length === 0) {
return
}
let some = false
while (++index < lines.length) {
const line = lines[index]
const line = collapseWhiteSpace(lines[index], {
style: 'html',
trim: true
})
if (line.trim() && !/^\s*\$\s*/.test(line)) {
return
}
if (!line) continue
// Unprefixed line is fine.
if (line.charCodeAt(0) !== 36 /* `$` */) return
some = true
}
file.message('Do not use dollar signs before shell commands', node)
if (!some) return
file.message(
'Unexpected shell code with every line prefixed by `$`, expected different code for input and output',
{ancestors: [...parents, node], place: node.position}
)
}

@@ -130,0 +181,0 @@ })

{
"name": "remark-lint-no-shell-dollars",
"version": "3.1.2",
"version": "4.0.0",
"description": "remark-lint rule to warn when shell code is prefixed by dollars",
"license": "MIT",
"keywords": [
"dollar",
"lint",
"remark",
"lint",
"remark-lint",
"remark-lint-rule",
"rule",
"remark-lint-rule",
"dollar",
"shel"
],
"repository": {
"type": "git",
"url": "https://github.com/remarkjs/remark-lint",
"directory": "packages/remark-lint-no-shell-dollars"
},
"repository": "https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-shell-dollars",
"bugs": "https://github.com/remarkjs/remark-lint/issues",

@@ -26,27 +23,33 @@ "funding": {

"contributors": [
"Titus Wormer <tituswormer@gmail.com> (https://wooorm.com)"
"Titus Wormer <tituswormer@gmail.com>"
],
"sideEffects": false,
"type": "module",
"main": "index.js",
"types": "index.d.ts",
"exports": "./index.js",
"files": [
"index.d.ts",
"index.d.ts.map",
"index.js"
],
"dependencies": {
"@types/mdast": "^3.0.0",
"unified": "^10.0.0",
"unified-lint-rule": "^2.0.0",
"unist-util-generated": "^2.0.0",
"unist-util-visit": "^4.0.0"
"@types/mdast": "^4.0.0",
"collapse-white-space": "^2.0.0",
"mdast-util-phrasing": "^4.0.0",
"unified-lint-rule": "^3.0.0",
"unist-util-visit-parents": "^6.0.0"
},
"scripts": {},
"xo": false,
"typeCoverage": {
"atLeast": 100,
"detail": true,
"strict": true,
"ignoreCatch": true
"ignoreCatch": true,
"strict": true
},
"xo": {
"prettier": true,
"rules": {
"capitalized-comments": "off",
"unicorn/prefer-code-point": "off"
}
}
}

@@ -5,43 +5,41 @@ <!--This file is generated-->

[![Build][build-badge]][build]
[![Coverage][coverage-badge]][coverage]
[![Downloads][downloads-badge]][downloads]
[![Size][size-badge]][size]
[![Sponsors][sponsors-badge]][collective]
[![Backers][backers-badge]][collective]
[![Chat][chat-badge]][chat]
[![Build][badge-build-image]][badge-build-url]
[![Coverage][badge-coverage-image]][badge-coverage-url]
[![Downloads][badge-downloads-image]][badge-downloads-url]
[![Size][badge-size-image]][badge-size-url]
[![Sponsors][badge-funding-sponsors-image]][badge-funding-url]
[![Backers][badge-funding-backers-image]][badge-funding-url]
[![Chat][badge-chat-image]][badge-chat-url]
[`remark-lint`][mono] rule to warn every line in shell code is preceded by `$`s.
[`remark-lint`][github-remark-lint] rule to warn when every line in shell code is preceded by `$`s.
## Contents
* [What is this?](#what-is-this)
* [When should I use this?](#when-should-i-use-this)
* [Presets](#presets)
* [Install](#install)
* [Use](#use)
* [API](#api)
* [`unified().use(remarkLintNoShellDollars[, config])`](#unifieduseremarklintnoshelldollars-config)
* [Recommendation](#recommendation)
* [Examples](#examples)
* [Compatibility](#compatibility)
* [Contribute](#contribute)
* [License](#license)
* [What is this?](#what-is-this)
* [When should I use this?](#when-should-i-use-this)
* [Presets](#presets)
* [Install](#install)
* [Use](#use)
* [API](#api)
* [`unified().use(remarkLintNoShellDollars)`](#unifieduseremarklintnoshelldollars)
* [Recommendation](#recommendation)
* [Examples](#examples)
* [Compatibility](#compatibility)
* [Contribute](#contribute)
* [License](#license)
## What is this?
This package is a [unified][] ([remark][]) plugin, specifically a `remark-lint`
rule.
Lint rules check markdown code style.
This package checks for `$` markers prefixing shell code,
which are hard to copy/paste.
## When should I use this?
You can use this package to check that not all lines in shell code are
preceded by dollars (`$`).
You can use this package to check shell code blocks.
## Presets
This rule is included in the following presets:
This plugin is included in the following presets:
| Preset | Setting |
| Preset | Options |
| - | - |

@@ -52,4 +50,5 @@ | [`remark-preset-lint-markdown-style-guide`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-preset-lint-markdown-style-guide) | |

This package is [ESM only][esm].
In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]:
This package is [ESM only][github-gist-esm].
In Node.js (version 16+),
install with [npm][npm-install]:

@@ -60,13 +59,13 @@ ```sh

In Deno with [`esm.sh`][esmsh]:
In Deno with [`esm.sh`][esm-sh]:
```js
import remarkLintNoShellDollars from 'https://esm.sh/remark-lint-no-shell-dollars@3'
import remarkLintNoShellDollars from 'https://esm.sh/remark-lint-no-shell-dollars@4'
```
In browsers with [`esm.sh`][esmsh]:
In browsers with [`esm.sh`][esm-sh]:
```html
<script type="module">
import remarkLintNoShellDollars from 'https://esm.sh/remark-lint-no-shell-dollars@3?bundle'
import remarkLintNoShellDollars from 'https://esm.sh/remark-lint-no-shell-dollars@4?bundle'
</script>

@@ -80,18 +79,20 @@ ```

```js
import remarkLint from 'remark-lint'
import remarkLintNoShellDollars from 'remark-lint-no-shell-dollars'
import remarkParse from 'remark-parse'
import remarkStringify from 'remark-stringify'
import {read} from 'to-vfile'
import {unified} from 'unified'
import {reporter} from 'vfile-reporter'
import {remark} from 'remark'
import remarkLint from 'remark-lint'
import remarkLintNoShellDollars from 'remark-lint-no-shell-dollars'
main()
const file = await read('example.md')
async function main() {
const file = await remark()
.use(remarkLint)
.use(remarkLintNoShellDollars)
.process(await read('example.md'))
await unified()
.use(remarkParse)
.use(remarkLint)
.use(remarkLintNoShellDollars)
.use(remarkStringify)
.process(file)
console.error(reporter(file))
}
console.error(reporter(file))
```

@@ -102,3 +103,3 @@

```sh
remark --use remark-lint --use remark-lint-no-shell-dollars example.md
remark --frail --use remark-lint --use remark-lint-no-shell-dollars .
```

@@ -124,18 +125,24 @@

This package exports no identifiers.
The default export is `remarkLintNoShellDollars`.
It exports no additional [TypeScript][typescript] types.
The default export is
[`remarkLintNoShellDollars`][api-remark-lint-no-shell-dollars].
### `unified().use(remarkLintNoShellDollars[, config])`
### `unified().use(remarkLintNoShellDollars)`
This rule supports standard configuration that all remark lint rules accept
(such as `false` to turn it off or `[1, options]` to configure it).
Warn when every line in shell code is preceded by `$`s.
###### Parameters
There are no options.
###### Returns
Transform ([`Transformer` from `unified`][github-unified-transformer]).
## Recommendation
Dollars make copy/pasting hard.
Either put both dollars in front of some lines (to indicate shell commands)
and don’t put them in front of other lines, or use fenced code to indicate
shell commands on their own, followed by another fenced code that contains
just the output.
Either put dollars in front of some lines (commands) and don’t put them in
front of other lines (output),
or use different code blocks for commands and output.

@@ -150,23 +157,21 @@ ## Examples

```bash
echo a
echo "Mercury and Venus"
```
```sh
echo a
echo a > file
echo "Mercury and Venus"
echo "Earth and Mars" > file
```
Mixed dollars for input lines and without for output is also OK:
```zsh
$ echo a
a
$ echo a > file
$ echo "Mercury and Venus"
Mercury and Venus
$ echo "Earth and Mars" > file
```
Some empty code:
```command
```
It’s fine to use dollars in non-shell code.
```js

@@ -187,8 +192,8 @@ $('div').remove()

```sh
$ echo a
$ echo "Mercury and Venus"
```
```bash
$ echo a
$ echo a > file
$ echo "Mercury and Venus"
$ echo "Earth and Mars" > file
```

@@ -200,4 +205,4 @@ ````

```text
1:1-3:4: Do not use dollar signs before shell commands
5:1-8:4: Do not use dollar signs before shell commands
1:1-3:4: Unexpected shell code with every line prefixed by `$`, expected different code for input and output
5:1-8:4: Unexpected shell code with every line prefixed by `$`, expected different code for input and output
```

@@ -207,14 +212,18 @@

Projects maintained by the unified collective are compatible with all maintained
Projects maintained by the unified collective are compatible with maintained
versions of Node.js.
As of now, that is Node.js 12.20+, 14.14+, and 16.0+.
Our projects sometimes work with older versions, but this is not guaranteed.
When we cut a new major release, we drop support for unmaintained versions of
Node.
This means we try to keep the current release line,
`remark-lint-no-shell-dollars@4`,
compatible with Node.js 16.
## Contribute
See [`contributing.md`][contributing] in [`remarkjs/.github`][health] for ways
See [`contributing.md`][github-dotfiles-contributing] in [`remarkjs/.github`][github-dotfiles-health] for ways
to get started.
See [`support.md`][support] for ways to get help.
See [`support.md`][github-dotfiles-support] for ways to get help.
This project has a [code of conduct][coc].
This project has a [code of conduct][github-dotfiles-coc].
By interacting with this repository, organization, or community you agree to

@@ -225,52 +234,54 @@ abide by its terms.

[MIT][license] © [Titus Wormer][author]
[MIT][file-license] © [Titus Wormer][author]
[build-badge]: https://github.com/remarkjs/remark-lint/workflows/main/badge.svg
[api-remark-lint-no-shell-dollars]: #unifieduseremarklintnoshelldollars
[build]: https://github.com/remarkjs/remark-lint/actions
[author]: https://wooorm.com
[coverage-badge]: https://img.shields.io/codecov/c/github/remarkjs/remark-lint.svg
[badge-build-image]: https://github.com/remarkjs/remark-lint/workflows/main/badge.svg
[coverage]: https://codecov.io/github/remarkjs/remark-lint
[badge-build-url]: https://github.com/remarkjs/remark-lint/actions
[downloads-badge]: https://img.shields.io/npm/dm/remark-lint-no-shell-dollars.svg
[badge-chat-image]: https://img.shields.io/badge/chat-discussions-success.svg
[downloads]: https://www.npmjs.com/package/remark-lint-no-shell-dollars
[badge-chat-url]: https://github.com/remarkjs/remark/discussions
[size-badge]: https://img.shields.io/bundlephobia/minzip/remark-lint-no-shell-dollars.svg
[badge-coverage-image]: https://img.shields.io/codecov/c/github/remarkjs/remark-lint.svg
[size]: https://bundlephobia.com/result?p=remark-lint-no-shell-dollars
[badge-coverage-url]: https://codecov.io/github/remarkjs/remark-lint
[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg
[badge-downloads-image]: https://img.shields.io/npm/dm/remark-lint-no-shell-dollars.svg
[backers-badge]: https://opencollective.com/unified/backers/badge.svg
[badge-downloads-url]: https://www.npmjs.com/package/remark-lint-no-shell-dollars
[collective]: https://opencollective.com/unified
[badge-funding-backers-image]: https://opencollective.com/unified/backers/badge.svg
[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg
[badge-funding-sponsors-image]: https://opencollective.com/unified/sponsors/badge.svg
[chat]: https://github.com/remarkjs/remark/discussions
[badge-funding-url]: https://opencollective.com/unified
[unified]: https://github.com/unifiedjs/unified
[badge-size-image]: https://img.shields.io/bundlejs/size/remark-lint-no-shell-dollars
[remark]: https://github.com/remarkjs/remark
[badge-size-url]: https://bundlejs.com/?q=remark-lint-no-shell-dollars
[mono]: https://github.com/remarkjs/remark-lint
[esm-sh]: https://esm.sh
[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
[file-license]: https://github.com/remarkjs/remark-lint/blob/main/license
[esmsh]: https://esm.sh
[github-dotfiles-coc]: https://github.com/remarkjs/.github/blob/main/code-of-conduct.md
[npm]: https://docs.npmjs.com/cli/install
[github-dotfiles-contributing]: https://github.com/remarkjs/.github/blob/main/contributing.md
[health]: https://github.com/remarkjs/.github
[github-dotfiles-health]: https://github.com/remarkjs/.github
[contributing]: https://github.com/remarkjs/.github/blob/main/contributing.md
[github-dotfiles-support]: https://github.com/remarkjs/.github/blob/main/support.md
[support]: https://github.com/remarkjs/.github/blob/main/support.md
[github-gist-esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
[coc]: https://github.com/remarkjs/.github/blob/main/code-of-conduct.md
[github-remark-lint]: https://github.com/remarkjs/remark-lint
[license]: https://github.com/remarkjs/remark-lint/blob/main/license
[github-unified-transformer]: https://github.com/unifiedjs/unified#transformer
[author]: https://wooorm.com
[npm-install]: https://docs.npmjs.com/cli/install
[typescript]: https://www.typescriptlang.org
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc