Skip to content

The parser's own code graph ​

Runs in any browser

Nothing to install.

The call graph of @geml/geml and its viewer, laid out as GEML documents by geml codemap build: one document per source file, every function a block with an id, and every call an edge kept both ways — #calls in the caller's document, #called-by in the callee's. geml codemap verify runs geml check and the profile's reference checks over the whole folder.

The result ​

Open it on its own page

How it is made ​

A SCIP index of each package goes in; a folder of .geml documents and the pages above come out. It is rebuilt from the parser's source whenever geml's main changes, and every document in it passes geml check:

sh
npx @sourcegraph/scip-typescript index --output parser.scip   # in geml-parser/, and again in the viewer
geml codemap build --adapter scip --raw parser.scip --adapter scip --raw viewer.scip --root . --out codemap --container file
geml codemap verify codemap
geml codemap render codemap

index.geml lists every module; each module has a document like geml-parser--attrs.ts.geml below — a code block per function, pointing at its lines in the source, then the edges.

geml
=== meta
profile = "geml-codemap/v1"
repo = geml
commit = de1d065
container = file
entry = geml-viewer--content.js.geml#main
resolution-default = cpg
===

# Code map — geml

=== table {#modules format=csv .no-fold}
module,                              doc,                                       methods, entries, tests
geml-parser/geml.ts,                 geml-parser--geml.ts.geml,                 115,     26,      0
geml-parser/verbs.ts,                geml-parser--verbs.ts.geml,                72,      21,      0
geml-parser/cli.ts,                  geml-parser--cli.ts.geml,                  48,      0,       0
geml-parser/render.ts,               geml-parser--render.ts.geml,               48,      8,       0
geml-parser/history.ts,              geml-parser--history.ts.geml,              39,      7,       0
geml-parser/table.ts,                geml-parser--table.ts.geml,                31,      5,       0
geml-parser/mcp-core.ts,             geml-parser--mcp-core.ts.geml,             28,      1,       0
geml-parser/media-verbs.ts,          geml-parser--media-verbs.ts.geml,          28,      15,      0
geml-viewer/render.js,               geml-viewer--render.js.geml,               28,      5,       0
geml-parser/coord.ts,                geml-parser--coord.ts.geml,                26,      8,       0
geml-parser/style-resolve.ts,        geml-parser--style-resolve.ts.geml,        26,      2,       0
geml-parser/inline.ts,               geml-parser--inline.ts.geml,               23,      4,       0
geml-parser/edn.ts,                  geml-parser--edn.ts.geml,                  20,      2,       0
geml-parser/style-selector.ts,       geml-parser--style-selector.ts.geml,       20,      8,       0
geml-viewer/transclude.js,           geml-viewer--transclude.js.geml,           19,      1,       0
geml-parser/mcp.ts,                  geml-parser--mcp.ts.geml,                  16,      0,       0
geml-parser/serialize.ts,            geml-parser--serialize.ts.geml,            16,      1,       0
geml-parser/to-md.ts,                geml-parser--to-md.ts.geml,                16,      1,       0
geml-parser/translate.ts,            geml-parser--translate.ts.geml,            13,      2,       0
geml-viewer/chart.js,                geml-viewer--chart.js.geml,                13,      1,       0
geml-parser/graph-style.ts,          geml-parser--graph-style.ts.geml,          12,      2,       0
geml-parser/host-fs.ts,              geml-parser--host-fs.ts.geml,              12,      6,       0
geml-parser/media-check.ts,          geml-parser--media-check.ts.geml,          12,      5,       0
geml-parser/media-compose.ts,        geml-parser--media-compose.ts.geml,        12,      5,       0
geml-parser/selector.ts,             geml-parser--selector.ts.geml,             12,      9,       0
geml-viewer/layout.js,               geml-viewer--layout.js.geml,               12,      3,       0
geml-parser/profiles.ts,             geml-parser--profiles.ts.geml,             11,      7,       0
geml-viewer/content.js,              geml-viewer--content.js.geml,              11,      1,       0
geml-parser/from-md.ts,              geml-parser--from-md.ts.geml,              10,      1,       0
geml-viewer/media-player.js,         geml-viewer--media-player.js.geml,         10,      0,       0
geml-viewer/inline-src.js,           geml-viewer--inline-src.js.geml,           9,       3,       0
geml-parser/block-edit.ts,           geml-parser--block-edit.ts.geml,           7,       1,       0
geml-parser/media-timeline.ts,       geml-parser--media-timeline.ts.geml,       7,       1,       0
geml-viewer/upgrade.js,              geml-viewer--upgrade.js.geml,              7,       3,       0
geml-parser/attrs.ts,                geml-parser--attrs.ts.geml,                6,       5,       0
geml-parser/code-graph.ts,           geml-parser--code-graph.ts.geml,           6,       1,       0
geml-parser/yaml.ts,                 geml-parser--yaml.ts.geml,                 6,       1,       0
geml-viewer/media.js,                geml-viewer--media.js.geml,                6,       0,       0
geml-viewer/style-entry.js,          geml-viewer--style-entry.js.geml,          6,       2,       0
geml-viewer/components.js,           geml-viewer--components.js.geml,           5,       1,       0
geml-viewer/translate-browser.js,    geml-viewer--translate-browser.js.geml,    5,       1,       0
geml-parser/chart.ts,                geml-parser--chart.ts.geml,                2,       1,       0
geml-parser/doc-title.ts,            geml-parser--doc-title.ts.geml,            2,       2,       0
geml-parser/ijson.ts,                geml-parser--ijson.ts.geml,                2,       2,       0
geml-parser/render-html.ts,          geml-parser--render-html.ts.geml,          2,       1,       0
geml-viewer/page.js,                 geml-viewer--page.js.geml,                 2,       2,       0
geml-viewer/snapshot.js,             geml-viewer--snapshot.js.geml,             2,       1,       0
geml-viewer/translate-map.js,        geml-viewer--translate-map.js.geml,        2,       0,       0
geml-parser/codemap-render.ts,       geml-parser--codemap-render.ts.geml,       1,       1,       0
geml-parser/diagnostics.ts,          geml-parser--diagnostics.ts.geml,          1,       1,       0
geml-parser/media-diagnostics.ts,    geml-parser--media-diagnostics.ts.geml,    1,       1,       0
geml-parser/media-player-runtime.ts, geml-parser--media-player-runtime.ts.geml, 1,       1,       0
geml-parser/style-diagnostics.ts,    geml-parser--style-diagnostics.ts.geml,    1,       1,       0
geml-viewer/bg.js,                   geml-viewer--bg.js.geml,                   1,       0,       0
geml-viewer/offscreen.js,            geml-viewer--offscreen.js.geml,            1,       0,       0
geml-viewer/render-html-stub.js,     geml-viewer--render-html-stub.js.geml,     1,       0,       0
===

=== table {#module-edges format=csv}
from,                          to,                                  calls
geml-parser/verbs.ts,          geml-parser/geml.ts,                 147
geml-parser/style-resolve.ts,  geml-parser/style-diagnostics.ts,    49
geml-parser/media-check.ts,    geml-parser/media-diagnostics.ts,    39
geml-parser/style-resolve.ts,  geml-parser/style-selector.ts,       22
geml-parser/cli.ts,            geml-parser/media-verbs.ts,          21
geml-parser/cli.ts,            geml-parser/verbs.ts,                21
geml-parser/media-verbs.ts,    geml-parser/media-check.ts,          20
geml-parser/verbs.ts,          geml-parser/selector.ts,             17
geml-parser/geml.ts,           geml-parser/diagnostics.ts,          16
geml-parser/geml.ts,           geml-parser/inline.ts,               13
geml-parser/codemap-render.ts, geml-parser/render.ts,               11
geml-parser/geml.ts,           geml-parser/attrs.ts,                11
geml-parser/cli.ts,            geml-parser/history.ts,              10
geml-parser/cli.ts,            geml-parser/host-fs.ts,              10
geml-parser/render-html.ts,    geml-parser/render.ts,               10
geml-parser/cli.ts,            geml-parser/geml.ts,                 9
geml-parser/geml.ts,           geml-parser/profiles.ts,             9
geml-parser/mcp-core.ts,       geml-parser/verbs.ts,                9
geml-parser/geml.ts,           geml-parser/coord.ts,                7
geml-parser/geml.ts,           geml-parser/table.ts,                7
geml-parser/media-verbs.ts,    geml-parser/profiles.ts,             7
geml-parser/verbs.ts,          geml-parser/attrs.ts,                7
geml-parser/cli.ts,            geml-parser/profiles.ts,             6
geml-parser/media-check.ts,    geml-parser/media-compose.ts,        6
geml-parser/verbs.ts,          geml-parser/coord.ts,                6
geml-parser/verbs.ts,          geml-parser/block-edit.ts,           5
geml-viewer/transclude.js,     geml-viewer/translate-browser.js,    5
geml-parser/geml.ts,           geml-parser/ijson.ts,                4
geml-parser/media-check.ts,    geml-parser/profiles.ts,             4
geml-parser/media-verbs.ts,    geml-parser/media-compose.ts,        4
geml-parser/media-verbs.ts,    geml-parser/media-timeline.ts,       4
geml-parser/verbs.ts,          geml-parser/to-md.ts,                4
geml-viewer/page.js,           geml-viewer/render.js,               4
geml-viewer/transclude.js,     geml-viewer/render.js,               4
geml-parser/cli.ts,            geml-parser/style-resolve.ts,        3
geml-parser/coord.ts,          geml-parser/table.ts,                3
geml-parser/geml.ts,           geml-parser/selector.ts,             3
geml-parser/host-fs.ts,        geml-parser/profiles.ts,             3
geml-parser/host-fs.ts,        geml-parser/verbs.ts,                3
geml-parser/mcp-core.ts,       geml-parser/geml.ts,                 3
geml-viewer/components.js,     geml-viewer/layout.js,               3
geml-viewer/content.js,        geml-viewer/inline-src.js,           3
geml-viewer/content.js,        geml-viewer/upgrade.js,              3
geml-viewer/transclude.js,     geml-viewer/inline-src.js,           3
geml-parser/block-edit.ts,     geml-parser/attrs.ts,                2
geml-parser/cli.ts,            geml-parser/media-check.ts,          2
geml-parser/code-graph.ts,     geml-parser/geml.ts,                 2
geml-parser/code-graph.ts,     geml-parser/graph-style.ts,          2
geml-parser/inline.ts,         geml-parser/attrs.ts,                2
geml-parser/mcp.ts,            geml-parser/history.ts,              2
geml-parser/mcp.ts,            geml-parser/host-fs.ts,              2
geml-parser/mcp.ts,            geml-parser/verbs.ts,                2
geml-parser/media-check.ts,    geml-parser/geml.ts,                 2
geml-parser/media-verbs.ts,    geml-parser/geml.ts,                 2
geml-parser/render.ts,         geml-parser/doc-title.ts,            2
geml-parser/render.ts,         geml-parser/geml.ts,                 2
geml-parser/render.ts,         geml-parser/inline.ts,               2
geml-parser/render.ts,         geml-parser/translate.ts,            2
geml-parser/selector.ts,       geml-parser/attrs.ts,                2
geml-parser/serialize.ts,      geml-parser/inline.ts,               2
geml-parser/style-selector.ts, geml-parser/geml.ts,                 2
geml-parser/to-md.ts,          geml-parser/doc-title.ts,            2
geml-parser/verbs.ts,          geml-parser/from-md.ts,              2
geml-parser/verbs.ts,          geml-parser/inline.ts,               2
geml-viewer/content.js,        geml-viewer/page.js,                 2
geml-viewer/content.js,        geml-viewer/render.js,               2
geml-viewer/page.js,           geml-viewer/style-entry.js,          2
geml-parser/cli.ts,            geml-parser/attrs.ts,                1
geml-parser/cli.ts,            geml-parser/selector.ts,             1
geml-parser/codemap-render.ts, geml-parser/code-graph.ts,           1
geml-parser/coord.ts,          geml-parser/edn.ts,                  1
geml-parser/geml.ts,           geml-parser/chart.ts,                1
geml-parser/geml.ts,           geml-parser/edn.ts,                  1
geml-parser/geml.ts,           geml-parser/yaml.ts,                 1
geml-parser/graph-style.ts,    geml-parser/geml.ts,                 1
geml-parser/host-fs.ts,        geml-parser/geml.ts,                 1
geml-parser/mcp.ts,            geml-parser/geml.ts,                 1
geml-parser/mcp.ts,            geml-parser/mcp-core.ts,             1
geml-parser/media-timeline.ts, geml-parser/geml.ts,                 1
geml-parser/media-verbs.ts,    geml-parser/media-player-runtime.ts, 1
geml-parser/style-resolve.ts,  geml-parser/geml.ts,                 1
geml-parser/style-selector.ts, geml-parser/style-diagnostics.ts,    1
geml-parser/table.ts,          geml-parser/attrs.ts,                1
geml-parser/table.ts,          geml-parser/inline.ts,               1
geml-parser/verbs.ts,          geml-parser/codemap-render.ts,       1
geml-parser/verbs.ts,          geml-parser/render-html.ts,          1
geml-parser/verbs.ts,          geml-parser/serialize.ts,            1
geml-parser/verbs.ts,          geml-parser/translate.ts,            1
geml-viewer/content.js,        geml-viewer/snapshot.js,             1
geml-viewer/content.js,        geml-viewer/transclude.js,           1
geml-viewer/page.js,           geml-viewer/components.js,           1
geml-viewer/page.js,           geml-viewer/layout.js,               1
geml-viewer/render.js,         geml-viewer/chart.js,                1
===
geml
=== meta
profile = "geml-codemap/v1"
module = geml-parser/attrs.ts
src = geml-parser/src/attrs.ts
entry = #oddNames #duplicateNames #coerce #tokenize #parseAttrs
resolution-default = cpg
===

# geml-parser/attrs.ts

=== code {#oddNames src=geml-parser/src/attrs.ts#L30-39 anchor="scip-typescript npm @geml/geml 1.12.0 src/`attrs.ts`/oddNames()."}
===

=== code {#duplicateNames src=geml-parser/src/attrs.ts#L60-70 anchor="scip-typescript npm @geml/geml 1.12.0 src/`attrs.ts`/duplicateNames()."}
===

=== code {#unescapeQuoted .leaf src=geml-parser/src/attrs.ts#L77-85 anchor="scip-typescript npm @geml/geml 1.12.0 src/`attrs.ts`/unescapeQuoted()."}
===

=== code {#coerce src=geml-parser/src/attrs.ts#L87-97 anchor="scip-typescript npm @geml/geml 1.12.0 src/`attrs.ts`/coerce()."}
===

=== code {#tokenize src=geml-parser/src/attrs.ts#L103-123 anchor="scip-typescript npm @geml/geml 1.12.0 src/`attrs.ts`/tokenize()."}
===

=== code {#parseAttrs src=geml-parser/src/attrs.ts#L126-151 anchor="scip-typescript npm @geml/geml 1.12.0 src/`attrs.ts`/parseAttrs()."}
===

=== table {#calls format=csv}
from,        to,              kind, confidence
#coerce,     #unescapeQuoted, call,
#parseAttrs, #coerce,         call,
#parseAttrs, #tokenize,       call,
===

=== table {#called-by format=csv}
from,                                             to,              kind, site
geml-parser--geml.ts.geml#reportOddNames,         #oddNames,       call, geml-parser/src/geml.ts:395
geml-parser--geml.ts.geml#reportDuplicateNames,   #duplicateNames, call, geml-parser/src/geml.ts:382
#coerce,                                          #unescapeQuoted, call, geml-parser/src/attrs.ts:90
#parseAttrs,                                      #coerce,         call, geml-parser/src/attrs.ts:143
geml-parser--geml.ts.geml#parseData,              #coerce,         call, geml-parser/src/geml.ts:1695
geml-parser--table.ts.geml#parseTable,            #coerce,         call, geml-parser/src/table.ts:408
#parseAttrs,                                      #tokenize,       call, geml-parser/src/attrs.ts:134
geml-parser--selector.ts.geml#keyForm,            #tokenize,       call, geml-parser/src/selector.ts:226
geml-parser--block-edit.ts.geml#rewriteBraces,    #parseAttrs,     call, geml-parser/src/block-edit.ts:52
geml-parser--block-edit.ts.geml#normalizeBlockId, #parseAttrs,     call, geml-parser/src/block-edit.ts:113
geml-parser--cli.ts.geml#runGet,                  #parseAttrs,     call, geml-parser/src/cli.ts:1322
geml-parser--geml.ts.geml#readFencedBlock,        #parseAttrs,     call, geml-parser/src/geml.ts:1325
geml-parser--geml.ts.geml#scanBlocks,             #parseAttrs,     call, geml-parser/src/geml.ts:1552
geml-parser--geml.ts.geml#scanBlocks,             #parseAttrs,     call, geml-parser/src/geml.ts:1567
geml-parser--geml.ts.geml#idOfHeading,            #parseAttrs,     call, geml-parser/src/geml.ts:3094
geml-parser--geml.ts.geml#fenceClose,             #parseAttrs,     call, geml-parser/src/geml.ts:3135
geml-parser--geml.ts.geml#collectSpans,           #parseAttrs,     call, geml-parser/src/geml.ts:3214
geml-parser--geml.ts.geml#collectSpans,           #parseAttrs,     call, geml-parser/src/geml.ts:3240
geml-parser--geml.ts.geml#closeFenceLine,         #parseAttrs,     call, geml-parser/src/geml.ts:3608
geml-parser--inline.ts.geml#readAttrs,            #parseAttrs,     call, geml-parser/src/inline.ts:219
geml-parser--inline.ts.geml#readAttrs,            #parseAttrs,     call, geml-parser/src/inline.ts:223
geml-parser--selector.ts.geml#keyForm,            #parseAttrs,     call, geml-parser/src/selector.ts:249
geml-parser--verbs.ts.geml#embedSrcOf,            #parseAttrs,     call, geml-parser/src/verbs.ts:231
geml-parser--verbs.ts.geml#selectUnits,           #parseAttrs,     call, geml-parser/src/verbs.ts:454
geml-parser--verbs.ts.geml#get,                   #parseAttrs,     call, geml-parser/src/verbs.ts:613
geml-parser--verbs.ts.geml#resolveSetTarget,      #parseAttrs,     call, geml-parser/src/verbs.ts:1161
geml-parser--verbs.ts.geml#declaresId,            #parseAttrs,     call, geml-parser/src/verbs.ts:1249
geml-parser--verbs.ts.geml#set,                   #parseAttrs,     call, geml-parser/src/verbs.ts:1334
geml-parser--verbs.ts.geml#bodyRange,             #parseAttrs,     call, geml-parser/src/verbs.ts:1837
===

=== table {#unresolved format=csv hidden}
from,            to
#oddNames,       Array.push
#oddNames,       ObjectConstructor.entries
#oddNames,       RegExp.test
#duplicateNames, Array.filter
#duplicateNames, ObjectConstructor.keys
#duplicateNames, Set.has
#coerce,         RegExp.test
#coerce,         String.endsWith
#coerce,         String.slice
#coerce,         String.startsWith
#coerce,         String.trim
#coerce,         parseFloat
#coerce,         parseInt
#tokenize,       Array.push
#tokenize,       RegExp.test
#parseAttrs,     Array.filter
#parseAttrs,     Array.map
#parseAttrs,     Array.push
#parseAttrs,     Map.get
#parseAttrs,     Map.set
#parseAttrs,     String.indexOf
#parseAttrs,     String.replace
#parseAttrs,     String.slice
#parseAttrs,     String.startsWith
#parseAttrs,     String.trim
===

All of them: public/playground/codemap/.

Last updated:

Code MIT · Specification CC BY 4.0