code-blocks

<img src="./assets/extension-logo.png"alt="logo" width='128'/>

Visual Studio Marketplace Version Visual Studio Marketplace Downloads Visual Studio Marketplace Installs GitHub CI GitHub last commit GitHub issues GitHub stars


Code blocks

Supercharge your editor with syntactically aware code navigation and manipulation, in any language supported by tree-sitter.

Features

Block mode

Syntactically aware code selection (e.g. select scope), navigation (e.g. goto next function) and manipulation (e.g. re-order function parameters), right inside your editor.

rust_parameters_example

Code Blocks Editor

Birds eye view over all your code blocks, with point and click refactoring.

svelte-1

Tree viewer

View your code’s syntax tree directly

tree_viewer

Requirements

Commands

Command Usage
codeBlocks.toggleActive Toggle auto-parsing current file
codeBlocks.toggleBlockMode Toggle Block Mode, will toggleActive if auto-parsing disabled
codeBlocks.toggleBlockModeColors Toggle Block Mode sibling/parent highlights
codeBlocks.open Reopen current file with Code Blocks editor
codeBlocks.openToTheSide Open current file with Code Blocks editor on the side
codeBlocks.openTreeViewer View current file syntax tree
codeBlocks.moveUp Swap block with its previous sibling
codeBlocks.moveDown Swap block with its next sibling
codeBlocks.navigateUp Navigate to previous sibling
codeBlocks.navigateDown Navigate to next sibling
codeBlocks.navigateUpForce Navigate to parent start
codeBlocks.navigateDownForce Navigate to parent end
codeBlocks.selectBlock Expand selection to previous sibling
codeBlocks.selectPrevious Expand selection to previous sibling
codeBlocks.selectNext Expand selection to next sibling
codeBlocks.selectParent Expand selection to parent
codeBlocks.selectChild Contract selection to first child

Keybindings

These are the default key bindings, they are only active when “block mode” is active, and when the cursor is inside a text editor tab:

Command Keybinding (cmd on mac)
codeBlocks.moveUp alt+left
codeBlocks.moveDown alt+right
codeBlocks.navigateUp ctrl/cmd+left
codeBlocks.navigateDown ctrl/cmd+right
codeBlocks.navigateUpForce ctrl/cmd+up
codeBlocks.navigateDownForce ctrl/cmd+down
codeBlocks.selectBlock -
codeBlocks.selectPrevious shift+left
codeBlocks.selectNext shift+right
codeBlocks.selectParent shift+up
codeBlocks.selectChild shift+down

Configuration

Global

Language specific (advanced)

These configurations are set at the languageId level.

Most languages should just work™, if you find a language that requires manual configuration please create an issue. Or create a pull request with your configuration added to the configurationDefaults section of the package.json file.

Example configuration for tsx

Language ID: typescriptreact

NPM package name: tree-sitter-typescript

WASM parser name: tree-sitter-ts.wasm

Desired blocks: JSX blocks, and documentation comments should be merged with documentees.

{
    // language ID of .tsx files is 'typescriptreact'
    "[typescriptreact]": {
        // languageID != package name
        "codeBlocks.npmPackageName": "tree-sitter-typescript",
        // languageID != parser name
        "codeBlocks.parserName": "tree-sitter-tsx",
        // tree-sitter-typescript package contains a 'typescript' dir and a 'tsx' dir, so we need to specify 'tsx
        "codeBlocks.subdirectory": "tsx",
        "codeBlocks.queries": [
            // group documentation comments with their documentees
            "( (comment)* @header . (class_declaration) @item)",
            "( (comment)* @header . (method_definition) @item)",
            "( (comment)* @header . (function_declaration) @item)",
            "( (comment)* @header . (export_statement) @item)",
            // build blocks from jsx elements
            "(jsx_element) @item",
            "(jsx_self_closing_element) @item"
        ]
    }
}

Custom editors

Known Issues

License

MIT License © 2023 Tom Selfin

Block Mode - Move - Rust - Functions

Block Mode - Move - Rust - Functions

Block Mode - Move - Rust - Match arms

Block Mode - Move - Rust - Match arms

Block Mode - Move - Rust - Parameters

Block Mode - Move - Rust - Parameters

Block Mode - Select - Rust

Block Mode - Select - Rust

Block Mode - Select - TypeScript

Block Mode - Select - TypeScript

Block Mode - Select - TypeScript - Selection expands to block

Block Mode - Select - TypeScript - Selection expands to block

Tree Viewer

Tree Viewer