Skip to content

Indexing gap: 1C.pas using Cyrillic identifiers #2211

Closed

Description

@a7in

Version

codebase-memory-mcp 0.10.8

Platform

Windows (x64)

Install channel

GitHub release archive / install.sh / install.ps1

Binary variant

ui

What happened, and what did you expect?

index_status reports 1C.pas as parse_partial. The file is indexed, but tree-sitter flags many lines that are valid Delphi 7 Object Pascal: late-bound Variant COM/OLE calls into 1C using Cyrillic identifiers (Документы, Пустая, ПолучитьОбъект, Записать, …).

Expected: Cyrillic letters are legal in Delphi identifiers. These dotted property/method chains should parse, and the unit should not be marked parse_partial for this pattern.

The same gap appears in other 1C-export units in the same project (Export1C.pas, V8.pas).

Related but not the same: #636 (Cyrillic in the repo path), #1401 (non-ASCII search queries). This is source-level Pascal identifier parsing.

Reproduction

Reproduction

Minimal shareable snippet (ASCII unit name; Cyrillic identifiers only):

unit Demo;
interface
procedure Demo1C;
implementation
procedure Demo1C;
var
v8_Base, v8_dst, NM: Variant;
begin
v8_dst := v8_Base.Документы.СчетНаОплатуПоставщика.НайтиПоНомеру('1', Now);
if v8_dst.Пустая() then Exit;
NM := v8_Base.Справочники.Номенклатура.НайтиПоКоду('123', 0);
if not NM.Пустая() then
NM.ПолучитьОбъект().Записать();
end;
end.
Index the file, then call index_status on the project.

Actual: those lines appear under parse_partial (error_ranges). Call-graph extraction for that procedure may be incomplete.
Expected: no parse error; Cyrillic identifiers treated as normal identifier nodes.

Confirmations: searched existing issues; this is not a duplicate. Reproduction uses a dummy snippet, not proprietary code.

Logs

codebase-memory-mcp could not fully index `1C.pas` (project `T-W-Dropbox-V-MEBEL-vit-PR2`) — best-effort coverage signal. Please: 1) call the index_status MCP tool and note this file's flagged line ranges under parse_partial; 2) read those ranges in the file and summarize which construct fails to parse; 3) file a GitHub issue at https://github.com/DeusData/codebase-memory-mcp/issues/new, titled "Indexing gap: 1C.pas", with the summary — include a minimal reproducible snippet ONLY if the code is shareable.

Diagnostics trajectory (memory / performance / leak issues)


Project scale (if relevant)

7047 nodes / 15083 edges

Confirmations

  • I searched existing issues and this is not a duplicate.
  • My reproduction uses shareable code (a dummy snippet or a public OSS repository), not proprietary code.

Activity

  1. added
    bugSomething isn't working
    on Sep 15, 2026
  2. added
    parsing/qualityGraph extraction bugs, false positives, missing edges
    ux/behaviorDisplay bugs, docs, adoption UX
    windowsWindows-specific issues
    on Sep 15, 2026
  3. added
    priority/highNeeds near-term maintainer attention; high-impact bug, regression, safety issue, or release blocker.
    on Sep 19, 2026
  4. DeusData commented on Sep 25, 2026

    @DeusData
    Owner

    Hi @a7in, thank you for this excellent report! The minimal snippet with ASCII-only unit names made it straightforward to reproduce, and ruling out #636/#1401 up front saved us real time.

    You were right: Delphi accepts non-ASCII letters in identifiers, and the late-bound 1C OLE calls (v8_Base.Документы...НайтиПоНомеру(...), NM.Пустая()) are perfectly valid code. The gap was in the tree-sitter Pascal grammar we vendor: its identifier token only accepts ASCII letters, so every Cyrillic name became a parse error. That flagged the unit as parse_partial, and a procedure whose own name is Cyrillic was dropped from the graph entirely.

    The fix (#2356) makes us maintain a small fork of that grammar with a one-line change: identifiers may start with any Unicode letter and continue with letters, combining marks, digits or _. Keywords such as begin/end/procedure are recognized exactly as before, and on ASCII code the new parser produces trees identical to the old one. On your snippet the file is no longer flagged, and Cyrillic-named procedures now show up as Function nodes.

    One expectation to set: calls to 1C's OLE members (НайтиПоНомеру, Записать, …) go into an external COM object, so they won't become CALLS edges to anything in your repo; they'll be parsed correctly and won't hide the surrounding code anymore. If some units are saved as Windows-1251 rather than UTF-8, re-saving them as UTF-8 avoids flags on those bytes. After upgrading, please re-index 1C.pas, Export1C.pas and V8.pas from scratch and let us know if anything is still flagged. Thanks again!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingparsing/qualityGraph extraction bugs, false positives, missing edgespriority/highNeeds near-term maintainer attention; high-impact bug, regression, safety issue, or release blocker.ux/behaviorDisplay bugs, docs, adoption UXwindowsWindows-specific issues

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions