npm.io
0.12.0 • Published 3d ago

vitepress-plugin-code-tree

Licence
MIT
Version
0.12.0
Deps
7
Size
43 kB
Vulns
0
Weekly
0
Stars
2

vitepress-plugin-code-tree

Render code tree structure in your VitePress site.

在 VitePress 中渲染代码树结构。

Usage

With Vitepress-tuck

Installation:

# npm
npm install -D vitepress-tuck vitepress-plugin-code-tree
# pnpm
pnpm add -D vitepress-tuck vitepress-plugin-code-tree
# yarn
yarn add -D vitepress-tuck vitepress-plugin-code-tree

Configuration:

// .vitepress/config.ts
import codeTree from 'vitepress-plugin-code-tree'
import { defineConfig } from 'vitepress-tuck'

export default defineConfig({
  plugins: [codeTree()],
})
// .vitepress/theme/index.ts
import type { Theme } from 'vitepress'
import enhanceApp from 'virtual:enhance-app'
import DefaultTheme from 'vitepress/theme'

export default {
  extends: DefaultTheme,
  enhanceApp(ctx) {
    enhanceApp(ctx)
  },
} satisfies Theme
With Vitepress

Installation:

# npm
npm install -D vitepress-plugin-code-tree
# pnpm
pnpm add -D vitepress-plugin-code-tree
# yarn
yarn add -D vitepress-plugin-code-tree

Configuration:

// .vitepress/config.ts
import { defineConfig } from 'vitepress'
import { codeTreeMarkdownPlugin } from 'vitepress-plugin-code-tree'

export default defineConfig({
  markdown: {
    config: (md) => {
      md.use(codeTreeMarkdownPlugin)
    },
  },
})
// .vitepress/theme/index.ts
import type { Theme } from 'vitepress'
import { enhanceAppWithCodeTree } from 'vitepress-plugin-code-tree/client'
import DefaultTheme from 'vitepress/theme'

export default {
  extends: DefaultTheme,
  enhanceApp(ctx) {
    enhanceAppWithCodeTree(ctx)
  },
} satisfies Theme

Syntax

The plugin provides two syntaxes to render a code tree: a container syntax for inline file content, and an embed syntax to load files from a directory.

Container Syntax

Use ::: code-tree container with fenced code blocks inside. Each fence must declare a filename via the [filename] syntax in its info string.

::: code-tree title="Project Structure"

```ts [index.ts]
const a = 1
```

```rs [main.rs]
fn main() {
    println!("Hello, world!");
}
```

:::
Container Attributes
Attribute Description Default
title Code tree title -
height Code tree container height 420px
entry Entry file, opened by default -
show-sidebar Show sidebar by default false
Active File

Add :active to a fence's info string to mark it as the default active file:

::: code-tree

```ts [index.ts] :active
const a = 1
```

```ts [utils.ts]
export const noop = () => {}
```

:::
Embed Syntax

Use @[code-tree](dir) to embed a directory as a code tree. Files in the directory are loaded and rendered automatically.

@[code-tree](./src)

The dir supports the following prefixes:

Prefix Description
@ Relative to VitePress srcDir
/ Relative to VitePress project root
- Relative to the current markdown file's directory
Embed Attributes
@[code-tree title="Source" height="500px" entry="index.ts" show-sidebar=true](./src)

Options

import codeTree, { loadCodeContent } from 'vitepress-plugin-code-tree'
import { defineConfig } from 'vitepress-tuck'

export default defineConfig({
  plugins: [
    codeTree({
      height: '500px',
      ignores: ['**/*.test.ts'],
      loaders: [
        {
          filter: ['**/*.md'],
          load: (file) =>  loadCodeContent(file, 'md'),
        },
      ],
    }),
  ],
})
Option Description Default
height Default code tree container height 420px
ignores Glob patterns to ignore files when loading directories []
loaders Custom file loaders for embed syntax []
File Loaders

Loaders are used by the embed syntax to load file content. The plugin ships with built-in loaders for common file types (images, config files, source files supported by Shiki). Custom loaders are merged before the built-in ones, so they take precedence.

loaders: [
  {
    filter: ['**/*.md'],
    load: (file) =>  loadCodeContent(file, 'md'),
  },
]

The filter field accepts a glob pattern, an array of glob patterns, or a function that receives a CodeTreeFile and returns a boolean.

Keywords