Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>Bilingo VSCode ExtensionNew to Visual Studio Code? Get it now.
Bilingo VSCode Extension

Bilingo VSCode Extension

A-yon Lee

|
4 installs
| (0) | Free
Find function and type references between Golang and TypeScript in bilingual projects.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Bilingo VSCode Extension

Find function and type references between Go and TypeScript in bilingual projects (Bilingo = Bilingual + Go).

Features

  • Cross-Language Reference Finding: Seamlessly find references between Go and TypeScript functions, interfaces, type alias, enum constants, and struct fields ↔ interface properties.
  • Cross-Language Implementation Finding: Find corresponding implementations across languages
    • Go functions ↔ TypeScript functions
    • Go interfaces / structs ↔ TypeScript interfaces / classes
  • Cross-Language Symbol Renaming: Rename symbols across Go and TypeScript with intelligent naming convention handling
    • Automatically converts between PascalCase, camelCase, and snake_case
    • Updates JSON tags in Go struct fields
    • Maintains consistent naming across both languages
  • Type Matching: Go structs ↔ TypeScript interfaces and enum constants (perfect for tygo-generated code)
  • Native Integration: Works directly with VSCode's built-in "Find All References" (Shift+F12) and "Find All Implementations" (Ctrl+F12) features
  • Smart Name Matching: Automatically handles case conversion (PascalCase ↔ camelCase)

Rules

  • Same-Directory Scope: Go and TypeScript symbols must be declared in the same directory
  • Top-Level Functions Only: Only match top-level functions, excludes nested functions
  • Exported Types Only: Only match exported Go structs/interfaces (capitalized) and exported TypeScript interfaces

Usage

Find All References

Simply use the native "Find All References" feature (right-click → "Find All References" or press Shift+F12) on any function or type name in Go or TypeScript files. The extension will automatically find references in both languages.

Find All Implementations

Use the native "Find All Implementations" feature (right-click → "Go to Implementations" or press Ctrl+F12 / Cmd+F12) on functions, structs, or interfaces in Go or TypeScript files. The extension will automatically find corresponding declarations and implementations in both languages.

Rename Symbol

Use the custom "Bilingo: Rename Symbol" command (press Shift+F2 or use Command Palette) on any supported symbol in Go or TypeScript files. The extension will automatically rename the symbol in both languages with appropriate naming conventions.

Why not F2? The native F2 rename (from Go and TypeScript LSP) is kept intact to avoid conflicts. Use Shift+F2 for cross-language rename, or F2 for single-language rename.

Example: Function Matching

When you trigger "Find All References" on a Go function:

// api/article.go
func GetArticle(id string) Article {
    // ...
}

The extension will find the corresponding TypeScript function in the same directory:

// api/article.ts
export function getArticle(id: string) {
    // ...
}

Along with all locations where the function is used.

Example: Type Matching

When you trigger "Find All References" on a Go struct:

// types/article.go
type Article struct {
    ID    string
    Title string
}

The extension will find the corresponding TypeScript interface in the same directory:

// types/article.ts
export interface Article {
    ID: string
    Title: string
}

Along with all locations where the interface or it's properties are used.

This is especially useful for projects using tygo to generate TypeScript types from Go structs.

Example: Enum Constant Matching

When you trigger "Find All References" on a Go constant:

// config/status.go
type Status = string

const (
    StatusActive   Status = "active"
    StatusInactive Status = "inactive"
)

The extension will find the corresponding TypeScript constant in the same directory:

// config/status.ts
export const StatusActive = "active"
export const StatusInactive = "inactive"
export type Status = typeof StatusActive | typeof StatusInactive

Along with all locations where these constants are used in both languages.

Example: Go Struct → TypeScript Interface → Implementations

When you trigger "Find All Implementations" on a Go struct:

// types/user.go
type User struct {  // ← Trigger here
    ID   string
    Name string
}
// types/user.ts
export interface User { // ← Found: TS interface
    id: string
    name: string
}

// somewhere-else.ts
export const user: User = { // ← Found: TS implementations
    id: "johndoe",
    name: "John Doe",
}

Example: Function Implementations

When you trigger "Find All Implementations" on a function:

// api/article.ts
export function getArticle(id: string): Article { // ← Trigger here
    // ...
}
// api/article.go
func GetArticle(id string) Article {  // ← Found
    // ...
}

And many more.

Example: Renaming a Struct Field

When you rename a Go struct field with a JSON tag:

// types/user.go
type User struct {
    UserID   string `json:"user_id"`  // ← Rename to "AccountID"
    UserName string `json:"userName"`
}

After renaming to AccountID, the extension updates:

// types/user.go
type User struct {
    AccountID string `json:"account_id"`  // ← Field + JSON tag updated
    UserName  string `json:"userName"`
}
// types/user.ts
export interface User {
    account_id: string // ← Updated to match JSON tag convention
    userName: string
}

Configuration

bilingo-vscode.enable

Type: boolean
Default: true

Enable or disable the extension in the current workspace.

{
    "bilingo-vscode.enable": true
}

bilingo-vscode.strictExport

Type: boolean Default: false

If enabled, when matching functions, only match exported functions:

  • Go capitalized functions ↔ TypeScript exported functions

When disabled, both exported and non-exported functions are matched.

{
    "bilingo-vscode.strictExport": true
}

Example with Strict Export

With strictExport: false (default) - Matches:

  • func GetArticle (Go) ↔ export function getArticle (TS) ✅
  • func GetArticle (Go) ↔ function getArticle (TS) ✅
  • func getArticle (Go) ↔ export function getArticle (TS) ✅
  • func getArticle (Go) ↔ function getArticle (TS) ✅

With strictExport: true - Matches:

  • func GetArticle (Go) ↔ export function getArticle (TS) ✅

With strictExport: true - Does NOT match:

  • func GetArticle (Go) ✗ function getArticle (TS) (TS not exported)
  • func getArticle (Go) ✗ export function getArticle (TS) (Go not exported)
  • func getArticle (Go) ✗ function getArticle (TS) (both not exported)

Requirements

  • VSCode version 1.97.0 or higher
  • Go VSCode extension
  • TypeScript VSCode language support

Supported Languages

  • Go (.go)
  • TypeScript (.ts)
  • TypeScript React (.tsx)

License

MIT

Repository

https://github.com/ayonli/bilingo-vscode

Issues

Report issues at: https://github.com/ayonli/bilingo-vscode/issues

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft