From 8b7d99393d481b343556f7f4c00b89e5a6648f4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20L=C3=B6vqvist?= Date: Fri, 17 Apr 2026 00:50:00 +0200 Subject: [PATCH] Updated documentation, added tree-sitter experiment --- experiments/package.json | 6 ++++ experiments/tree-sitter-1.mjs | 52 +++++++++++++++++++++++++++++++++++ planning/dsl.md | 25 +++++++++++++++++ planning/to-document.md | 19 +++++++++++++ 4 files changed, 102 insertions(+) create mode 100644 experiments/package.json create mode 100644 experiments/tree-sitter-1.mjs create mode 100644 planning/dsl.md create mode 100644 planning/to-document.md diff --git a/experiments/package.json b/experiments/package.json new file mode 100644 index 0000000..346de98 --- /dev/null +++ b/experiments/package.json @@ -0,0 +1,6 @@ +{ + "devDependencies": { + "tree-sitter": "^0.25.0", + "tree-sitter-javascript": "^0.25.0" + } +} diff --git a/experiments/tree-sitter-1.mjs b/experiments/tree-sitter-1.mjs new file mode 100644 index 0000000..90b1fb3 --- /dev/null +++ b/experiments/tree-sitter-1.mjs @@ -0,0 +1,52 @@ +import Parser from 'tree-sitter'; +import JavaScript from 'tree-sitter-javascript'; +import { readFileSync } from 'node:fs'; +import { inspect } from 'node:util'; + +// NOTE: once upon a time +// there was some sort of +// +// example comment that we wanted to investigate + +const parser = new Parser(); +parser.setLanguage(JavaScript); + +class example { + + #private = 123 + + /* + This other comment + is of the style of a + block comment of course + */ + + stuff() { + + } + +} + +const source = readFileSync('./tree-sitter-1.mjs', 'utf-8'); +const tree = parser.parse(source); + +function* iter_nodes(node) { + yield node; + for (let i = 0; i < node.childCount; i++) { + yield* iter_nodes(node.child(i)); + } +} + + +function *iter_child_nodes(node) { + for (let i = 0; i < node.childCount; i++) { + yield node.child(i); + } +} + + +for (const node of iter_child_nodes(tree.rootNode)) { + //console.log({type: node.type, text: node.text?.slice(0, 40)}); + console.log(inspect(node)); + console.log({text: node.text}); +} \ No newline at end of file diff --git a/planning/dsl.md b/planning/dsl.md new file mode 100644 index 0000000..182692a --- /dev/null +++ b/planning/dsl.md @@ -0,0 +1,25 @@ + +## Example of indented block + +``` +§ block + this content + is in the block body +``` + + +## Inline + +`«inline expression»` + +## Escaping + + +``` +«§» block + + Here is an «la»inline expression«ra» + Or possibly «outer escape: inline expression» + +``` + diff --git a/planning/to-document.md b/planning/to-document.md new file mode 100644 index 0000000..57b6aa2 --- /dev/null +++ b/planning/to-document.md @@ -0,0 +1,19 @@ +# Readme.md + +In `readme.md` we should explain that `npm install` can be used both with and without development dependencies. + +We are likely to want some development dependencies for the following purposes: + +- Template processing +- Ecmascript parsing for inline rich semantic documentation + + +## Installing tree-sitter-javascript + +- requires `node-gyp` + +```sh +CXXFLAGS="-std=c++20" npm i -D tree-sitter tree-sitter-javascript +``` + +This section should be somewhat expanded - especially regarding node-gyp