Skip to content

couimet/rangeLink

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

RangeLink

RangeLink Logo

VS Code Marketplace Open VSX Version License

"Claude Code today. Cursor AI tomorrow. Different shortcuts, different muscle memory."
RangeLink ends it. One keybinding. Any AI, any tool. Character-level precision. recipes/baking/chickenpie.ts#L3C14-L314C16


Why RangeLink?

Every AI coding assistant has its own way to share code β€” different shortcuts, different formats, different muscle memory. If you use multiple AI tools, you're constantly context-switching.

RangeLink unifies it:

  • One keybinding β€” Cmd+R Cmd+L works with Claude Code, Cursor AI, Copilot, terminal tools, text editors. Learn once, use everywhere.
  • Better precision β€” Character-level ranges, not just lines. Share exactly what matters.
  • Universal format β€” GitHub-style links work in PRs, Slack, docs. Not proprietary.
  • AI-agnostic β€” Your workflow doesn't change when you switch AI assistants.

Quick Install

VS Code: πŸ“¦ Install from VS Code Marketplace

Cursor: πŸ“¦ Install from Open VSX Registry

Or search for "RangeLink" in your editor's Extensions panel (Cmd+Shift+X / Ctrl+Shift+X)


Try It

  1. Bind a destination (optional but recommended): Command Palette β†’ "Bind RangeLink to..." (Claude Code, Cursor AI, Copilot Chat, Terminal, or Text Editor)
  2. Select some code in your editor
  3. Generate link: Command Palette β†’ "Copy Range Link" (or Cmd+R Cmd+L / Ctrl+R Ctrl+L if no keybinding conflicts)
  4. Done! Link auto-pastes to your bound destination, or copies to clipboard if no destination bound

Example output:

recipes/baking/chickenpie.ts#L3C14-L314C16

Tip: If Cmd+R Cmd+L doesn't work, another extension may have claimed that keybinding. Use Command Palette as the reliable fallback.


Features at a Glance

Feature Description
Paste Destinations Auto-send links to Claude Code, Cursor AI, Copilot Chat, Terminal, or Text Editor
Link Navigation Cmd+Click any RangeLink in terminal or editor to jump directly to code
Character Precision #L3C14-L314C16 β€” not just lines, exact character ranges
Portable Links (BYOD) Links work regardless of recipient's delimiter configuration
R-Keybinding Family R-L (link), R-C (clipboard), R-V (paste text), R-J (jump to destination)

πŸ“– Full Feature Guide β†’


Perfect For

  • πŸ€– AI Assistants β€” Claude Code, Cursor AI, GitHub Copilot, terminal claude-code β€” with exact context
  • πŸ’¬ Code Reviews β€” "The bug is in api/routes.ts#L215C8-L223C45" (click to view)
  • πŸ‘₯ Team Collaboration β€” Universal format everyone can use and navigate
  • πŸ“ Documentation β€” Precise references in docs, Slack, PRs, anywhere

Documentation

For Users

For Contributors


Monorepo Structure

RangeLink is organized as a pnpm workspace with a platform-agnostic core library and editor-specific extensions. The core has zero dependencies and targets 100% test coverage.

πŸ“ See packages/ for details β†’


History

Even though I use Cursor daily, most of my AI work happens with claude-code running in a terminal inside Cursor. The constant copy-pasting between terminal and editor was exhausting.

One day, frustrated after the hundredth copy-paste, I tried something: I sent claude-code a link like recipes/baking/chickenpie.ts#L3C14-L314C16 pointing to a specific code snippet.

It just worked. No explanation needed. Claude understood immediately.

That was the lightbulb moment: precise code references should be universal. Not just for AI assistants, but for code reviews, documentation, team collaboration β€” anywhere developers share code.

I built the VS Code extension first, then extracted a platform-agnostic core library. The goal: make this work everywhere, for everyone.

Today, with paste destinations, RangeLink sends links directly where you need them β€” Claude Code, Cursor AI, GitHub Copilot Chat, terminals, or text editors. No more copy-paste friction. It helps developers share code with precision across any AI assistant, VSCode, Cursor, GitHub, Slack, and more. One format, zero friction.

The best part? Your teammates don't even need RangeLink installed to understand your links. The notation is GitHub-inspired β€” developers already know it.

πŸ•°οΈ The Original POC (Memorabilia)

Before RangeLink became what it is today, it started as a rough-and-ready VS Code extension with just two files. Here's where it all began:

package.json:

{
  "name": "copy-reference",
  "displayName": "Copy GitHub Reference",
  "description": "Copy GitHub-style file references with line and column numbers",
  "version": "0.1.0",
  "publisher": "local",
  "engines": {
    "vscode": "^1.74.0"
  },
  "categories": ["Other"],
  "main": "./extension.js",
  "activationEvents": [],
  "contributes": {
    "commands": [
      {
        "command": "copyReference.copy",
        "title": "Copy GitHub-style Reference",
        "category": "Copy"
      }
    ],
    "keybindings": [
      {
        "command": "copyReference.copy",
        "key": "cmd+shift+l",
        "mac": "cmd+shift+l",
        "win": "ctrl+shift+l",
        "linux": "ctrl+shift+l",
        "when": "editorTextFocus"
      }
    ],
    "menus": {
      "editor/context": [
        {
          "when": "editorTextFocus",
          "command": "copyReference.copy",
          "group": "9_cutcopypaste@4"
        }
      ]
    }
  }
}

extension.js:

const vscode = require('vscode');

function activate(context) {
  let disposable = vscode.commands.registerCommand('copyReference.copy', () => {
    const editor = vscode.window.activeTextEditor;
    if (!editor) {
      vscode.window.showErrorMessage('No active editor');
      return;
    }

    const selection = editor.selection;
    const document = editor.document;
    const workspaceFolder = vscode.workspace.getWorkspaceFolder(document.uri);

    // Get relative path from workspace root
    const relativePath = workspaceFolder
      ? document.uri.path.substring(workspaceFolder.uri.path.length + 1)
      : vscode.workspace.asRelativeUri(document.uri).path;

    const startLine = selection.start.line + 1;
    const startChar = selection.start.character + 1;
    const endLine = selection.end.line + 1;
    const endChar = selection.end.character + 1;

    // Format: path/to/file.rb#L1C1-L2C10
    let reference;
    if (selection.isEmpty) {
      // Just cursor position, no selection
      reference = `${relativePath}:${startLine}`;
    } else if (startLine === endLine && startChar === 1 && endChar > startChar) {
      // Full line selection - use simple format
      reference = `${relativePath}:${startLine}`;
    } else if (startLine === endLine) {
      // Single line selection with specific columns
      reference = `${relativePath}#L${startLine}C${startChar}-L${endLine}C${endChar}`;
    } else {
      // Multi-line selection
      reference = `${relativePath}#L${startLine}C${startChar}-L${endLine}C${endChar}`;
    }

    vscode.env.clipboard.writeText(reference);

    // Show a subtle notification
    vscode.window.setStatusBarMessage(`πŸ“‹ Copied: ${reference}`, 3000);

    // Optional: Also show as information message (can be disabled if too intrusive)
    // vscode.window.showInformationMessage(`Copied: ${reference}`);
  });

  context.subscriptions.push(disposable);
}

function deactivate() {}

module.exports = {
  activate,
  deactivate,
};

From this humble beginning, RangeLink evolved into a comprehensive monorepo with a platform-agnostic core library, comprehensive testing, structured error handling, portable BYOD links, and support for advanced features like rectangular selections.


About the Logo

Ever notice the chicken in our logo? That's not just any chicken β€” it's a free-range chicken. Because your code should roam free across editors, tools, and teams. No fences, no boundaries. πŸ”

The chains? Those represent links β€” connections between developers, tools, and ideas. Collaboration without constraints.

And here's the nerdy part: look closely at the numbers. You'll see 3.1416 instead of just 3.14. Because when you're sharing code references, precision matters. RangeLink shares exact ranges β€” period.

Tip

Ο€ Dad Joke: Pi is irrational, and so are developers who don't use precise code references. At least Pi has an excuse.


Links


License

MIT β€” see LICENSE file for details.


Made with ❀️ for developers who love precision