Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>Mongol Code ExplainerNew to Visual Studio Code? Get it now.
Mongol Code Explainer

Mongol Code Explainer

tsewegmid

|
7 installs
| (0) | Free
Config-driven multi-language code explainer with HoverProvider support. Explains HTML, CSS, JS, Python, TypeScript, JSON, SQL, PHP code in Mongolian & English.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

🇲🇳 Mongol Code Explainer

HTML, CSS, JavaScript, Python кодыг олон хэлээр тайлбарлах VS Code extension
Config-driven архитектур, HoverProvider дэмжлэг, AI-гүй dictionary-based тайлбар

VS Code TypeScript Version Tests


🎉 Шинэ (v2.0)

  • ✅ Config-driven архитектур - JSON dictionary-аар олон хэл дэмжих
  • ✅ HoverProvider - Код засахгүй tooltip тайлбар
  • ✅ MN + EN - Монгол болон Англи хэлний тайлбар
  • ✅ SOLID принцип - Factory Pattern, Dependency Injection
  • ✅ Test Suite - Vitest-тэй 92% test coverage
  • ✅ JSON словарь - Компайлгүйгээр тайлбар засах

✨ Онцлог

Онцлог Тайлбар
🌍 Олон хэл Монгол (MN) болон English (EN) дэмжлэг
🎯 8 хэл HTML, CSS, JS, Python, TypeScript, JSON, SQL, PHP
🔍 Dictionary-based AI-гүй, үнэгүй, хурдан, offline ажиллах
💬 Smart Comments Inline / Above comment modes
🎈 HoverProvider Hover хийхэд tooltip тайлбар (код засахгүй)
⚡ Right-click Menu Код сонгоод right-click → "Explain"
🔧 Config-driven JSON-аар тайлбар засах, шинэ хэл нэмэх боломж
🏗️ SOLID Architecture Factory Pattern, extensible design
🧪 Tested 92% test coverage (Vitest)

🏗️ Архитектур

Системийн бүтэц

mongol-code-explainer/
├── src/
│   ├── config/                    # Тохиргоо, dictionary loader
│   │   ├── DictionaryLoader.ts    # Singleton dictionary manager
│   │   └── dictionaries/
│   │       └── dictionary.json    # MN + EN тайлбарууд
│   │
│   ├── core/                      # Core системийн логик
│   │   ├── ILanguageExplainer.ts  # Explainer интерфэйс
│   │   └── ExplainerRegistry.ts   # Factory Pattern registry
│   │
│   ├── explainers/                # Language-specific тайлбарчид
│   │   ├── ConfigHTMLExplainer.ts
│   │   ├── ConfigJavaScriptExplainer.ts
│   │   ├── ConfigPythonExplainer.ts
│   │   ├── CSSExplainer.ts        # Legacy explainers
│   │   ├── JavaScriptExplainer.ts
│   │   └── ...
│   │
│   ├── providers/                 # VS Code providers
│   │   └── CodeExplanationHoverProvider.ts
│   │
│   └── extension.ts               # Extension entry point
│
├── vitest.config.ts               # Test тохиргоо
└── tests/ (__tests__)             # Unit тестүүд (92/100 passing)

Загварууд (Design Patterns)

1. Factory Pattern (ExplainerRegistry)

Explainer-үүдийг dynamic-аар бүртгэж, тохирох explainer-г автоматаар сонгоно:

// ExplainerRegistry.ts
class ExplainerRegistry {
    private explainers: ILanguageExplainer[] = [];

    register(explainer: ILanguageExplainer) {
        this.explainers.push(explainer);
        this.explainers.sort((a, b) => a.priority - b.priority);
    }

    findExplainer(code: string, language?: string): ILanguageExplainer {
        return this.explainers.find(e => e.canHandle(code, language));
    }
}

Давуу тал:

  • Шинэ explainer нэмэхэд extension.ts засах шаардлагагүй
  • Priority-based selection (бага дугаар = өндөр эрх)
  • Уян хатан, өргөтгөх боломжтой

2. Singleton Pattern (DictionaryLoader)

Dictionary нэг удаа ачаалагдаж, бүх explainer-үүд хуваалцана:

// DictionaryLoader.ts
class DictionaryLoader {
    private static instance: DictionaryLoader;
    private dictionary: Dictionary | null = null;
    private currentLanguage: string = 'mn';

    private constructor() {}

    static getInstance(): DictionaryLoader {
        if (!DictionaryLoader.instance) {
            DictionaryLoader.instance = new DictionaryLoader();
        }
        return DictionaryLoader.instance;
    }

    async loadDictionary(): Promise<void> {
        const filePath = path.join(__dirname, 'dictionaries/dictionary.json');
        this.dictionary = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
    }

    getHTMLTag(tag: string, languageCode?: string): string | undefined {
        const lang = languageCode || this.currentLanguage;
        return this.dictionary?.languages[lang]?.html?.tags?.[tag];
    }
}

Давуу тал:

  • Санах ойг хэмнэнэ (нэг dictionary instance)
  • Global state management
  • Language switching хялбар

3. Strategy Pattern (Config-driven Explainers)

Config-driven explainer-үүд dictionary-аас тайлбар авч ажиллана:

// ConfigHTMLExplainer.ts
class ConfigHTMLExplainer implements ILanguageExplainer {
    constructor(private loader: DictionaryLoader) {}

    explain(code: string, mode: 'inline' | 'above'): string {
        const lines = code.split('\n');
        return lines.map(line => {
            const tagMatch = line.match(/<(\w+)/);
            if (tagMatch) {
                const tag = tagMatch[1];
                const explanation = this.loader.getHTMLTag(tag);
                if (explanation) {
                    return `${line}  <!-- ${explanation} -->`;
                }
            }
            return line;
        }).join('\n');
    }
}

Давуу тал:

  • JSON засаад компайлгүйгээр шинэчлэгдэнэ
  • Олон хэл нэмэх хялбар
  • Non-technical хүмүүс ч засаж чадна

Өгөгдлийн урсгал (Data Flow)

User Action (Right-click / Hover)
        ↓
VS Code Command/HoverProvider
        ↓
ExplainerRegistry.findExplainer()
        ↓
Selected Explainer.canHandle() → true
        ↓
Explainer.explain(code, mode)
        ↓
DictionaryLoader.getHTMLTag() / getJSKeyword()
        ↓
dictionary.json → { "mn": {...}, "en": {...} }
        ↓
Return formatted explanation
        ↓
Insert comment / Show tooltip

Кодын жишээ: Explainer interface

// ILanguageExplainer.ts
export interface ILanguageExplainer {
    readonly language: string;      // "html", "javascript", "python"
    readonly priority: number;       // 10, 20, 30 (бага = өндөр)

    canHandle(code: string, language?: string): boolean;
    explain(code: string, mode: 'inline' | 'above'): string;
}

Extension activation

// extension.ts
export async function activate(context: vscode.ExtensionContext) {
    // 1. Dictionary ачаалах
    await dictionaryLoader.loadDictionary();

    // 2. Explainer-үүд бүртгэх
    const registry = new ExplainerRegistry();
    registry.register(new ConfigHTMLExplainer());      // priority: 10
    registry.register(new ConfigJavaScriptExplainer()); // priority: 30
    registry.register(new ConfigPythonExplainer());     // priority: 40

    // 3. Commands бүртгэх
    const explainCommand = vscode.commands.registerCommand(
        'mongolExplainer.explain',
        async () => {
            const editor = vscode.window.activeTextEditor;
            const code = editor.document.getText(editor.selection);
            const language = editor.document.languageId;

            const explainer = registry.findExplainer(code, language);
            const explanation = explainer.explain(code, 'inline');

            await editor.edit(editBuilder => {
                editBuilder.replace(editor.selection, explanation);
            });
        }
    );

    // 4. HoverProvider бүртгэх
    const hoverProvider = new CodeExplanationHoverProvider(registry);
    vscode.languages.registerHoverProvider(
        ['html', 'javascript', 'python', 'css', 'typescript'],
        hoverProvider
    );

    context.subscriptions.push(explainCommand, hoverProvider);
}

🚀 Хурдан эхлэл

1️⃣ Суулгах

VS Code Extension Marketplace → "Mongol Code Explainer" хайж суулгах

2️⃣ Хэл сонгох

VS Code Settings:

{
  "mongolExplainer.explanationLanguage": "mn"  // "mn" эсвэл "en"
}

Эсвэл UI-аар:

  1. Ctrl + , (Settings)
  2. "Mongol Explainer" хайх
  3. Explanation Language → Монгол (mn) эсвэл English (en)
Команд Товчлол Тайлбар
Explain Code Right-click Сонгосон кодыг тайлбарлах
Hover Explanation Mouse hover Tooltip тайлбар харах (код засахгүй)
Switch Language Settings MN ⇄ EN хооронд солих
Settings Ctrl+Shift+P → "Mongol Explainer" Тохиргоо нээх

🎈 HoverProvider - Код засахгүй тайлбар

Кодон дээр cursor-ээ байрлуулахад tooltip тайлбар гарна:

HoverProvider Demo

Ашиглалт:

  1. Код файл нээх (HTML, JS, Python гэх мэт)
  2. Tag, keyword, функц дээр cursor тавих
  3. Автоматаар tooltip тайлбар гарна
  4. Код өөрчлөгдөхгүй - зөвхөн үзүүлнэ

Дэмжигдсэн хэлүүд:

  • HTML: tags, attributes
  • JavaScript: keywords, functions, methods
  • Python: keywords, functions, classes
  • CSS: properties
  • TypeScript, JSON, SQL, PHP

Жишээ

HTML тайлбарлах

Өмнө:

<div class="container">
    <h1>Сайн уу</h1>
    <button onclick="handleClick()">Дарах</button>
</div>

Дараа (Beginner түвшин):

<!-- Агуулга бүлэглэх контейнер, class="container" -->
<div class="container">
    <!-- Хамгийн том гарчиг -->
    <h1>Сайн уу</h1>
    <!-- Товч, дарахад handleClick() функц дуудагдана -->
    <button onclick="handleClick()">Дарах</button>
</div>

JavaScript тайлбарлах

Өмнө:

async function fetchUser(id) {
    const response = await fetch(`/api/users/${id}`);
    return response.json();
}

Дараа (Advanced түвшин):

// Асинхрон функц - хэрэглэгчийн мэдээллийг сервераас татах
// Параметр: id (хэрэглэгчийн дугаар)
// Буцаах утга: JSON объект (хэрэглэгчийн мэдээлэл)
async function fetchUser(id) {
    // API endpoint-руу HTTP GET хүсэлт илгээнэ
    // Template literal ашиглан dynamic URL үүсгэнэ
    const response = await fetch(`/api/users/${id}`);
    
    // Response-ийг JSON болгон parse хийж буцаана
    return response.json();
}

CSS тайлбарлах

Өмнө:

.container {
    max-width: 1200px;
    margin: 0 auto;
    padding: 20px;
}

Дараа:

/* "container" класс-ын загвар */
/* Хамгийн их өргөн 1200px */
/* Хоёр талаас тэнцүү зай авч төвд байрлуулна */
/* Дотор тал бүр 20px зай үлдээнэ */
.container {
    max-width: 1200px;
    margin: 0 auto;
    padding: 20px;
}

🧪 Test Suite

Extension-г Vitest ашиглан test хийсэн:

Test Results:

  • ✅ 92/100 tests passing (92% success rate)
  • ✅ 5 test suites (~886 lines of test code)
  • ✅ Core coverage: DictionaryLoader, ExplainerRegistry
  • ✅ Explainer coverage: HTML, JavaScript, Python config-driven explainers

Test commands:

npm test              # Бүх тест ажиллуулах
npm run test:watch    # Watch mode
npm run test:ui       # UI dashboard
npm run test:coverage # Coverage report үүсгэх

Test structure:

src/
├── config/__tests__/
│   └── DictionaryLoader.test.ts    (18 tests: singleton, loading, languages)
├── core/__tests__/
│   └── ExplainerRegistry.test.ts   (12 tests: factory pattern, priority)
└── explainers/__tests__/
    ├── ConfigHTMLExplainer.test.ts       (18 tests: tags, attributes, multi-lang)
    ├── ConfigJavaScriptExplainer.test.ts (23 tests: functions, variables, methods)
    └── ConfigPythonExplainer.test.ts     (29 tests: classes, loops, imports)

⚙️ Тохиргоо

Settings → Extensions → Mongol Code Explainer

Тохиргоо Утга Тайлбар
explanationLanguage mn / en Тайлбарын хэл
commentMode inline / above Comment байрлал

JSON тохиргоо засах:

settings.json:

{
  "mongolExplainer.explanationLanguage": "mn",
  "mongolExplainer.commentMode": "inline"
}

Dictionary засах:

src/config/dictionaries/dictionary.json:

{
  "version": "2.0.0",
  "languages": {
    "mn": {
      "html": {
        "tags": {
          "div": "Агуулга бүлэглэх контейнер",
          "p": "Параграф"
        }
      }
    },
    "en": {
      "html": {
        "tags": {
          "div": "Container for grouping content",
          "p": "Paragraph"
        }
      }
    }
  }
}

🛠️ Хөгжүүлэгчдэд

Development setup

# Clone repository
git clone https://github.com/yourusername/mongol-code-explainer.git
cd mongol-code-explainer

# Install dependencies
npm install

# Compile TypeScript
npm run compile

# Watch mode (development)
npm run watch

# Run tests
npm test

# Package extension
npm run package

Шинэ explainer нэмэх

  1. Interface implement хийх:
// src/explainers/MyCustomExplainer.ts
import { ILanguageExplainer } from '../core/ILanguageExplainer';

export class MyCustomExplainer implements ILanguageExplainer {
    readonly language = 'mycustomlang';
    readonly priority = 50;

    canHandle(code: string, language?: string): boolean {
        return language === 'mycustomlang' || code.includes('custom');
    }

    explain(code: string, mode: 'inline' | 'above'): string {
        // Тайлбар үүсгэх логик
        return code + ' // My explanation';
    }
}
  1. Registry-д бүртгэх:
// src/extension.ts
registry.register(new MyCustomExplainer());

Шинэ хэл нэмэх (dictionary)

dictionary.json файлд шинэ хэл нэмэх:

{
  "languages": {
    "mn": { ... },
    "en": { ... },
    "jp": {
      "html": {
        "tags": {
          "div": "コンテンツをグループ化するコンテナ"
        }
      }
    }
  }
}

📚 Баримт бичиг

  • Architecture Guide - Архитектурын дэлгэрэнгүй
  • HoverProvider Guide - HoverProvider ашиглалт
  • CHANGELOG - Өөрчлөлтийн түүх
  • Contributing Guidelines - Хувь нэмэр оруулах заавар

⚙️ Тохиргоо

Settings → Extensions → Mongol Code Explainer

Тохиргоо Утга Тайлбар
aiProvider openai / local AI provider сонгох
openaiApiKey sk-... OpenAI API key
openaiModel gpt-4o OpenAI model
localModelName llama3 Ollama model нэр
defaultLevel beginner / advanced Анхдагч түвшин
insertAsComment true / false Comment хэлбэрээр оруулах

📄 License

📄 License

MIT License - үнэгүй ашиглаж болно


🤝 Contributing

Pull requests тавтай морилно уу! Томоохон өөрчлөлтийн хувьд эхлээд issue нээнэ үү.

Contribution steps:

  1. Fork the repository
  2. Create feature branch (git checkout -b feature/amazing-feature)
  3. Commit changes (git commit -m 'Add amazing feature')
  4. Push to branch (git push origin feature/amazing-feature)
  5. Open Pull Request

📧 Contact

  • Email: tsewegmidmonhotgon@gmail.com
  • Issues: GitHub Issues

⭐ Support

Хэрэв энэ extension танд тус болсон бол ⭐ star өгөөрэй!

Roadmap:

  • [ ] F) Coverage 100% хүрэх
  • [ ] G) CI/CD pipeline (GitHub Actions)
  • [ ] H) Japanese (JP) хэл нэмэх
  • [ ] I) Бусад explainer-үүд config-driven болгох
  • [ ] J) VS Code Marketplace-д нийтлэх
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft