Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

codedown

Package Overview
Dependencies
Maintainers
0
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

codedown

Extract and run code blocks from Markdown files

  • 3.2.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
272
decreased by-25.07%
Maintainers
0
Weekly downloads
 
Created
Source

Build Status Coverage Status npm version

Codedown

Codedown is a little utility to extract code blocks from Markdown files. Inspired by literate Haskell, Codedown can be used to:

  • Validate the correctness of code embedded in Markdown
  • Run code embedded in Markdown
  • Ship code and Markdown together in harmony

Quicker start

To skip installing Codedown locally, try it online.

Quick start

Install Codedown:

$ npm install -g codedown

Run Codedown:

Usage: codedown <lang> [...]

Options:
--separator <separator line>
--section <section number>

Example:
cat README.md | codedown haskell --separator=----- --section 1.3

Codedown reads Markdown from stin, extracts the code blocks designated as language <lang>, and outputs them to stdout. The example above extracts the Haskell code from section 1.3 of this file, and outputs it with five dashes in between each block:

x :: Int
x = 42
-----
main :: IO ()
main = putStrLn $ show x

We can pipe the output of Codedown to a language interpreter:

$ cat README.md | codedown haskell | runhaskell
42
$ cat README.md | codedown javascript | node
42
$ cat README.md | codedown scala | xargs -0 scala -e
42

Examples

This readme is a Markdown file, so we can use Codedown to extract code from it.

Variables in different languages

In the following code blocks, let's set x to 42 in different languages:

Haskell:

x :: Int
x = 42

JavaScript:

var x = 42;

Scala:

val x = 42

Console output in different languages

Now let's print x it to stdout in different languages. This time, the code blocks are nested within an unordered list:

  • Haskell:

    main :: IO ()
    main = putStrLn $ show x
    
  • JavaScript:

    console.log(x);
    
  • Scala:

    println(x)
    

Sections and subsections

The section above is 1.3, counting by headings. It has two subsections (1.3.1 and 1.3.2). We can specify a section number to extract the content from just that section:

$ cat README.md | codedown haskell --section 1.3
x :: Int
x = 42

main :: IO ()
main = putStrLn $ show x
$ cat README.md | codedown haskell --section 1.3.1
x :: Int
x = 42
$ cat README.md | codedown haskell --section 1.3.2
main :: IO ()
main = putStrLn $ show x

We can also specify a section by heading:

cat README.md | ./codedown.js haskell --section '### Variables in different languages'
x :: Int
x = 42

Wildcard matching

Codedown can use wildcards to match file paths, which are used by some markdown implementations:

lib/codedown.js:

var x = 42;
$ cat README.md | codedown '**/*.js'
var x = 42

Additionally, you can use a special * character in place of the language option to extract any/all code blocks agnostic of language:

$ cat README.md | codedown '*'

Separator

If there are multiple code blocks in the same file, we can specify a separator to insert in between them:

$ cat README.md | codedown haskell --separator=-----
x :: Int
x = 42
-----
main :: IO ()
main = putStrLn $ show x

Keywords

FAQs

Package last updated on 12 Oct 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

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