feat: add treesitter

This commit is contained in:
Maciej Jur 2024-02-13 01:40:54 +01:00
parent d96034325b
commit a8cb3c0c78
Signed by: kamov
GPG key ID: 191CBFF5F72ECAFD
21 changed files with 872 additions and 119 deletions

View file

@ -8,6 +8,7 @@ import rehypeKatex from 'rehype-katex';
import remarkEmoji from 'remark-emoji';
import remarkBib from './src/utils/remark/bib';
import remarkRuby from './src/utils/remark/ruby';
import rehypeTreesitter from './src/utils/treesitter';
// https://astro.build/config
@ -18,6 +19,7 @@ export default defineConfig({
enabled: true,
},
markdown: {
syntaxHighlight: false,
remarkPlugins: [
remarkDirective,
remarkMath,
@ -28,10 +30,8 @@ export default defineConfig({
rehypePlugins: [
// https://katex.org/docs/options.html
[rehypeKatex, { output: 'mathml' }],
rehypeTreesitter,
],
shikiConfig: {
theme: 'min-light'
},
},
integrations: [
mdx(),

View file

@ -15,7 +15,7 @@
"@astrojs/svelte": "^5.0.3",
"@citation-js/plugin-bibtex": "^0.7.8",
"@js-temporal/polyfill": "^0.4.4",
"astro": "^4.3.5",
"astro": "^4.3.6",
"astro-pagefind": "^1.4.0",
"chart.js": "^4.4.1",
"citation-js": "^0.7.8",
@ -33,7 +33,7 @@
"remark-parse": "^11.0.0",
"remark-rehype": "^11.1.0",
"reveal.js": "^5.0.4",
"svelte": "5.0.0-next.51",
"svelte": "5.0.0-next.52",
"unified": "^11.0.4",
"unist-util-visit": "^5.0.0"
},

View file

@ -7,10 +7,10 @@ settings:
dependencies:
'@astrojs/mdx':
specifier: ^2.1.1
version: 2.1.1(astro@4.3.5)
version: 2.1.1(astro@4.3.6)
'@astrojs/svelte':
specifier: ^5.0.3
version: 5.0.3(astro@4.3.5)(svelte@5.0.0-next.51)(typescript@5.3.3)(vite@5.1.0)
version: 5.0.3(astro@4.3.6)(svelte@5.0.0-next.52)(typescript@5.3.3)(vite@5.1.1)
'@citation-js/plugin-bibtex':
specifier: ^0.7.8
version: 0.7.8(@citation-js/core@0.7.6)
@ -18,11 +18,11 @@ dependencies:
specifier: ^0.4.4
version: 0.4.4
astro:
specifier: ^4.3.5
version: 4.3.5(sass@1.70.0)(typescript@5.3.3)
specifier: ^4.3.6
version: 4.3.6(sass@1.70.0)(typescript@5.3.3)
astro-pagefind:
specifier: ^1.4.0
version: 1.4.0(astro@4.3.5)
version: 1.4.0(astro@4.3.6)
chart.js:
specifier: ^4.4.1
version: 4.4.1
@ -72,8 +72,8 @@ dependencies:
specifier: ^5.0.4
version: 5.0.4
svelte:
specifier: 5.0.0-next.51
version: 5.0.0-next.51
specifier: 5.0.0-next.52
version: 5.0.0-next.52
unified:
specifier: ^11.0.4
version: 11.0.4
@ -103,6 +103,9 @@ devDependencies:
sharp:
specifier: ^0.33.2
version: 0.33.2
treesitter:
specifier: file:/home/kamov/Desktop/treesitter
version: file:../../Desktop/treesitter
packages:
@ -143,16 +146,16 @@ packages:
- supports-color
dev: false
/@astrojs/mdx@2.1.1(astro@4.3.5):
/@astrojs/mdx@2.1.1(astro@4.3.6):
resolution: {integrity: sha512-AgGFdE7HOGmoFooGvMSatkA9FiSKwyVW7ImHot/bXJ6uAbFfu6iG2ht18Cf1pT22Hda/6iSCGWusFvBv0/EnKQ==}
engines: {node: '>=18.14.1'}
peerDependencies:
astro: ^4.0.0
dependencies:
'@astrojs/markdown-remark': 4.2.1
'@mdx-js/mdx': 3.0.0
'@mdx-js/mdx': 3.0.1
acorn: 8.11.3
astro: 4.3.5(sass@1.70.0)(typescript@5.3.3)
astro: 4.3.6(sass@1.70.0)(typescript@5.3.3)
es-module-lexer: 1.4.1
estree-util-visit: 2.0.0
github-slugger: 2.0.0
@ -176,17 +179,17 @@ packages:
prismjs: 1.29.0
dev: false
/@astrojs/svelte@5.0.3(astro@4.3.5)(svelte@5.0.0-next.51)(typescript@5.3.3)(vite@5.1.0):
/@astrojs/svelte@5.0.3(astro@4.3.6)(svelte@5.0.0-next.52)(typescript@5.3.3)(vite@5.1.1):
resolution: {integrity: sha512-6TUBRUxmsEczKPBT6oDUAfvzuFCmITuhZfKPT5ZtOOyj9XOVnEnj/Iobd3ajKUbpWNYX7qZVAd1KMkmJc1Nhsg==}
engines: {node: '>=18.14.1'}
peerDependencies:
astro: ^4.0.0
svelte: ^4.0.0 || ^5.0.0-next.1
dependencies:
'@sveltejs/vite-plugin-svelte': 3.0.2(svelte@5.0.0-next.51)(vite@5.1.0)
astro: 4.3.5(sass@1.70.0)(typescript@5.3.3)
svelte: 5.0.0-next.51
svelte2tsx: 0.6.27(svelte@5.0.0-next.51)(typescript@5.3.3)
'@sveltejs/vite-plugin-svelte': 3.0.2(svelte@5.0.0-next.52)(vite@5.1.1)
astro: 4.3.6(sass@1.70.0)(typescript@5.3.3)
svelte: 5.0.0-next.52
svelte2tsx: 0.6.27(svelte@5.0.0-next.52)(typescript@5.3.3)
transitivePeerDependencies:
- supports-color
- typescript
@ -986,8 +989,8 @@ packages:
resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==}
dev: false
/@mdx-js/mdx@3.0.0:
resolution: {integrity: sha512-Icm0TBKBLYqroYbNW3BPnzMGn+7mwpQOK310aZ7+fkCtiU3aqv2cdcX+nd0Ydo3wI5Rx8bX2Z2QmGb/XcAClCw==}
/@mdx-js/mdx@3.0.1:
resolution: {integrity: sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==}
dependencies:
'@types/estree': 1.0.5
'@types/estree-jsx': 1.0.4
@ -1003,7 +1006,7 @@ packages:
hast-util-to-jsx-runtime: 2.3.0
markdown-extensions: 2.0.0
periscopic: 3.1.0
remark-mdx: 3.0.0
remark-mdx: 3.0.1
remark-parse: 11.0.0
remark-rehype: 11.1.0
source-map: 0.7.4
@ -1080,104 +1083,104 @@ packages:
resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==}
dev: false
/@rollup/rollup-android-arm-eabi@4.9.6:
resolution: {integrity: sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==}
/@rollup/rollup-android-arm-eabi@4.10.0:
resolution: {integrity: sha512-/MeDQmcD96nVoRumKUljsYOLqfv1YFJps+0pTrb2Z9Nl/w5qNUysMaWQsrd1mvAlNT4yza1iVyIu4Q4AgF6V3A==}
cpu: [arm]
os: [android]
requiresBuild: true
dev: false
optional: true
/@rollup/rollup-android-arm64@4.9.6:
resolution: {integrity: sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==}
/@rollup/rollup-android-arm64@4.10.0:
resolution: {integrity: sha512-lvu0jK97mZDJdpZKDnZI93I0Om8lSDaiPx3OiCk0RXn3E8CMPJNS/wxjAvSJJzhhZpfjXsjLWL8LnS6qET4VNQ==}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: false
optional: true
/@rollup/rollup-darwin-arm64@4.9.6:
resolution: {integrity: sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==}
/@rollup/rollup-darwin-arm64@4.10.0:
resolution: {integrity: sha512-uFpayx8I8tyOvDkD7X6n0PriDRWxcqEjqgtlxnUA/G9oS93ur9aZ8c8BEpzFmsed1TH5WZNG5IONB8IiW90TQg==}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: false
optional: true
/@rollup/rollup-darwin-x64@4.9.6:
resolution: {integrity: sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==}
/@rollup/rollup-darwin-x64@4.10.0:
resolution: {integrity: sha512-nIdCX03qFKoR/MwQegQBK+qZoSpO3LESurVAC6s6jazLA1Mpmgzo3Nj3H1vydXp/JM29bkCiuF7tDuToj4+U9Q==}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: false
optional: true
/@rollup/rollup-linux-arm-gnueabihf@4.9.6:
resolution: {integrity: sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==}
/@rollup/rollup-linux-arm-gnueabihf@4.10.0:
resolution: {integrity: sha512-Fz7a+y5sYhYZMQFRkOyCs4PLhICAnxRX/GnWYReaAoruUzuRtcf+Qnw+T0CoAWbHCuz2gBUwmWnUgQ67fb3FYw==}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@rollup/rollup-linux-arm64-gnu@4.9.6:
resolution: {integrity: sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==}
/@rollup/rollup-linux-arm64-gnu@4.10.0:
resolution: {integrity: sha512-yPtF9jIix88orwfTi0lJiqINnlWo6p93MtZEoaehZnmCzEmLL0eqjA3eGVeyQhMtxdV+Mlsgfwhh0+M/k1/V7Q==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@rollup/rollup-linux-arm64-musl@4.9.6:
resolution: {integrity: sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==}
/@rollup/rollup-linux-arm64-musl@4.10.0:
resolution: {integrity: sha512-9GW9yA30ib+vfFiwjX+N7PnjTnCMiUffhWj4vkG4ukYv1kJ4T9gHNg8zw+ChsOccM27G9yXrEtMScf1LaCuoWQ==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@rollup/rollup-linux-riscv64-gnu@4.9.6:
resolution: {integrity: sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==}
/@rollup/rollup-linux-riscv64-gnu@4.10.0:
resolution: {integrity: sha512-X1ES+V4bMq2ws5fF4zHornxebNxMXye0ZZjUrzOrf7UMx1d6wMQtfcchZ8SqUnQPPHdOyOLW6fTcUiFgHFadRA==}
cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@rollup/rollup-linux-x64-gnu@4.9.6:
resolution: {integrity: sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==}
/@rollup/rollup-linux-x64-gnu@4.10.0:
resolution: {integrity: sha512-w/5OpT2EnI/Xvypw4FIhV34jmNqU5PZjZue2l2Y3ty1Ootm3SqhI+AmfhlUYGBTd9JnpneZCDnt3uNOiOBkMyw==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@rollup/rollup-linux-x64-musl@4.9.6:
resolution: {integrity: sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==}
/@rollup/rollup-linux-x64-musl@4.10.0:
resolution: {integrity: sha512-q/meftEe3QlwQiGYxD9rWwB21DoKQ9Q8wA40of/of6yGHhZuGfZO0c3WYkN9dNlopHlNT3mf5BPsUSxoPuVQaw==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: false
optional: true
/@rollup/rollup-win32-arm64-msvc@4.9.6:
resolution: {integrity: sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==}
/@rollup/rollup-win32-arm64-msvc@4.10.0:
resolution: {integrity: sha512-NrR6667wlUfP0BHaEIKgYM/2va+Oj+RjZSASbBMnszM9k+1AmliRjHc3lJIiOehtSSjqYiO7R6KLNrWOX+YNSQ==}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: false
optional: true
/@rollup/rollup-win32-ia32-msvc@4.9.6:
resolution: {integrity: sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==}
/@rollup/rollup-win32-ia32-msvc@4.10.0:
resolution: {integrity: sha512-FV0Tpt84LPYDduIDcXvEC7HKtyXxdvhdAOvOeWMWbQNulxViH2O07QXkT/FffX4FqEI02jEbCJbr+YcuKdyyMg==}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: false
optional: true
/@rollup/rollup-win32-x64-msvc@4.9.6:
resolution: {integrity: sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==}
/@rollup/rollup-win32-x64-msvc@4.10.0:
resolution: {integrity: sha512-OZoJd+o5TaTSQeFFQ6WjFCiltiYVjIdsXxwu/XZ8qRpsvMQr4UsVrE5UyT9RIvsnuF47DqkJKhhVZ2Q9YW9IpQ==}
cpu: [x64]
os: [win32]
requiresBuild: true
@ -1189,7 +1192,7 @@ packages:
engines: {node: '>=10'}
dev: false
/@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@5.0.0-next.51)(vite@5.1.0):
/@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@5.0.0-next.52)(vite@5.1.1):
resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==}
engines: {node: ^18.0.0 || >=20}
peerDependencies:
@ -1197,30 +1200,30 @@ packages:
svelte: ^4.0.0 || ^5.0.0-next.0
vite: ^5.0.0
dependencies:
'@sveltejs/vite-plugin-svelte': 3.0.2(svelte@5.0.0-next.51)(vite@5.1.0)
'@sveltejs/vite-plugin-svelte': 3.0.2(svelte@5.0.0-next.52)(vite@5.1.1)
debug: 4.3.4
svelte: 5.0.0-next.51
vite: 5.1.0(sass@1.70.0)
svelte: 5.0.0-next.52
vite: 5.1.1(sass@1.70.0)
transitivePeerDependencies:
- supports-color
dev: false
/@sveltejs/vite-plugin-svelte@3.0.2(svelte@5.0.0-next.51)(vite@5.1.0):
/@sveltejs/vite-plugin-svelte@3.0.2(svelte@5.0.0-next.52)(vite@5.1.1):
resolution: {integrity: sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==}
engines: {node: ^18.0.0 || >=20}
peerDependencies:
svelte: ^4.0.0 || ^5.0.0-next.0
vite: ^5.0.0
dependencies:
'@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@5.0.0-next.51)(vite@5.1.0)
'@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@5.0.0-next.52)(vite@5.1.1)
debug: 4.3.4
deepmerge: 4.3.1
kleur: 4.1.5
magic-string: 0.30.7
svelte: 5.0.0-next.51
svelte-hmr: 0.15.3(svelte@5.0.0-next.51)
vite: 5.1.0(sass@1.70.0)
vitefu: 0.2.5(vite@5.1.0)
svelte: 5.0.0-next.52
svelte-hmr: 0.15.3(svelte@5.0.0-next.52)
vite: 5.1.1(sass@1.70.0)
vitefu: 0.2.5(vite@5.1.1)
transitivePeerDependencies:
- supports-color
dev: false
@ -1423,19 +1426,19 @@ packages:
hasBin: true
dev: false
/astro-pagefind@1.4.0(astro@4.3.5):
/astro-pagefind@1.4.0(astro@4.3.6):
resolution: {integrity: sha512-WMUlS0TTqIDqygplj/cxKU+l3oI+zB2qgYNMZed5R5nXuw8HhAKATog9zazuN05TOSWxI2Ap9+9WAYnnJ+4C7A==}
peerDependencies:
astro: ^2.0.4 || ^3.0.0 || ^4.0.0
dependencies:
'@pagefind/default-ui': 1.0.4
astro: 4.3.5(sass@1.70.0)(typescript@5.3.3)
astro: 4.3.6(sass@1.70.0)(typescript@5.3.3)
pagefind: 1.0.4
sirv: 2.0.4
dev: false
/astro@4.3.5(sass@1.70.0)(typescript@5.3.3):
resolution: {integrity: sha512-7jPffNlcmDO94NlkWe/hUWta/pIjlx1LVD/DZb/fyjT1Jv+7mGhKZBIjkDfeVpequW70mep8cAS5RM7Pxa0Gdg==}
/astro@4.3.6(sass@1.70.0)(typescript@5.3.3):
resolution: {integrity: sha512-VYJGsBygMtPM/qTRgn5QdxkSILgjpW2uHVw3snp/Gkl+N9uRAAnuYxrUO7wkbLejfrmlb0nZyyKG+H5VDQPbeg==}
engines: {node: '>=18.14.1', npm: '>=6.14.0'}
hasBin: true
dependencies:
@ -1463,7 +1466,7 @@ packages:
debug: 4.3.4
deterministic-object-hash: 2.0.2
devalue: 4.3.2
diff: 5.1.0
diff: 5.2.0
dlv: 1.1.3
dset: 3.1.3
es-module-lexer: 1.4.1
@ -1493,13 +1496,14 @@ packages:
semver: 7.6.0
server-destroy: 1.0.1
shikiji: 0.9.19
shikiji-core: 0.9.19
string-width: 7.1.0
strip-ansi: 7.1.0
tsconfck: 3.0.2(typescript@5.3.3)
unist-util-visit: 5.0.0
vfile: 6.0.1
vite: 5.1.0(sass@1.70.0)
vitefu: 0.2.5(vite@5.1.0)
vite: 5.1.1(sass@1.70.0)
vitefu: 0.2.5(vite@5.1.1)
which-pm: 2.1.1
yargs-parser: 21.1.1
zod: 3.22.4
@ -1533,6 +1537,37 @@ packages:
resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
dev: false
/bare-events@2.2.0:
resolution: {integrity: sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==}
requiresBuild: true
dev: false
optional: true
/bare-fs@2.1.3:
resolution: {integrity: sha512-Oa7F0QJV7We0mtKq7Tk246uiBrl7vun64cPEsJOEwv2vHjnVL9yO7aH3643aSrd4rXfVe7yhJ9LHZywQQAXKFQ==}
requiresBuild: true
dependencies:
bare-events: 2.2.0
bare-os: 2.1.2
bare-path: 2.1.0
streamx: 2.15.8
dev: false
optional: true
/bare-os@2.1.2:
resolution: {integrity: sha512-slQjOn78Q8itnzomNAamiKo5MDpEpV3JnoNZ93lyynaFh6paWcU+5c0GVcZ7EYIJC2unN2JGdF1qupdscYl0Yg==}
requiresBuild: true
dev: false
optional: true
/bare-path@2.1.0:
resolution: {integrity: sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw==}
requiresBuild: true
dependencies:
bare-os: 2.1.2
dev: false
optional: true
/base-64@1.0.0:
resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==}
dev: false
@ -1588,8 +1623,8 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
caniuse-lite: 1.0.30001585
electron-to-chromium: 1.4.662
caniuse-lite: 1.0.30001587
electron-to-chromium: 1.4.665
node-releases: 2.0.14
update-browserslist-db: 1.0.13(browserslist@4.22.3)
dev: false
@ -1613,8 +1648,8 @@ packages:
engines: {node: '>=14.16'}
dev: false
/caniuse-lite@1.0.30001585:
resolution: {integrity: sha512-yr2BWR1yLXQ8fMpdS/4ZZXpseBgE7o4g41x3a6AJOqZuOi+iE/WdJYAuZ6Y95i4Ohd2Y+9MzIWRR+uGABH4s3Q==}
/caniuse-lite@1.0.30001587:
resolution: {integrity: sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==}
dev: false
/ccount@2.0.1:
@ -1908,8 +1943,8 @@ packages:
dequal: 2.0.3
dev: false
/diff@5.1.0:
resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
/diff@5.2.0:
resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
engines: {node: '>=0.3.1'}
dev: false
@ -1926,8 +1961,8 @@ packages:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
dev: false
/electron-to-chromium@1.4.662:
resolution: {integrity: sha512-gfl1XVWTQmPHhqEG0kN77SpUxaqPpMb9r83PT4gvKhg7P3irSxru3lW85RxvK1uI1j2CAcTWPjG/HbE0IP/Rtg==}
/electron-to-chromium@1.4.665:
resolution: {integrity: sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw==}
dev: false
/emoji-regex@10.3.0:
@ -2244,8 +2279,8 @@ packages:
engines: {node: '>=4'}
dev: false
/hasown@2.0.0:
resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==}
/hasown@2.0.1:
resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==}
engines: {node: '>= 0.4'}
dependencies:
function-bind: 1.1.2
@ -2334,7 +2369,7 @@ packages:
estree-util-is-identifier-name: 3.0.0
hast-util-whitespace: 3.0.0
mdast-util-mdx-expression: 2.0.0
mdast-util-mdx-jsx: 3.0.0
mdast-util-mdx-jsx: 3.1.0
mdast-util-mdxjs-esm: 2.0.1
property-information: 6.4.1
space-separated-tokens: 2.0.2
@ -2373,7 +2408,7 @@ packages:
estree-util-is-identifier-name: 3.0.0
hast-util-whitespace: 3.0.0
mdast-util-mdx-expression: 2.0.0
mdast-util-mdx-jsx: 3.0.0
mdast-util-mdx-jsx: 3.1.0
mdast-util-mdxjs-esm: 2.0.1
property-information: 6.4.1
space-separated-tokens: 2.0.2
@ -2502,7 +2537,7 @@ packages:
/is-core-module@2.13.1:
resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
dependencies:
hasown: 2.0.0
hasown: 2.0.1
dev: false
/is-decimal@2.0.1:
@ -2882,8 +2917,8 @@ packages:
- supports-color
dev: false
/mdast-util-mdx-jsx@3.0.0:
resolution: {integrity: sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA==}
/mdast-util-mdx-jsx@3.1.0:
resolution: {integrity: sha512-A8AJHlR7/wPQ3+Jre1+1rq040fX9A4Q1jG8JxmSNp/PLPHg80A6475wxTp3KzHpApFH6yWxFotHrJQA3dXP6/w==}
dependencies:
'@types/estree-jsx': 1.0.4
'@types/hast': 3.0.4
@ -2907,7 +2942,7 @@ packages:
dependencies:
mdast-util-from-markdown: 2.0.0
mdast-util-mdx-expression: 2.0.0
mdast-util-mdx-jsx: 3.0.0
mdast-util-mdx-jsx: 3.1.0
mdast-util-mdxjs-esm: 2.0.1
mdast-util-to-markdown: 2.1.0
transitivePeerDependencies:
@ -3907,8 +3942,8 @@ packages:
- supports-color
dev: false
/remark-mdx@3.0.0:
resolution: {integrity: sha512-O7yfjuC6ra3NHPbRVxfflafAj3LTwx3b73aBvkEFU5z4PsD6FD4vrqJAkE5iNGLz71GdjXfgRqm3SQ0h0VuE7g==}
/remark-mdx@3.0.1:
resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==}
dependencies:
mdast-util-mdx: 3.0.0
micromark-extension-mdxjs: 3.0.0
@ -4016,26 +4051,26 @@ packages:
engines: {node: '>=18.0.0'}
dev: false
/rollup@4.9.6:
resolution: {integrity: sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==}
/rollup@4.10.0:
resolution: {integrity: sha512-t2v9G2AKxcQ8yrG+WGxctBes1AomT0M4ND7jTFBCVPXQ/WFTvNSefIrNSmLKhIKBrvN8SG+CZslimJcT3W2u2g==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
dependencies:
'@types/estree': 1.0.5
optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.9.6
'@rollup/rollup-android-arm64': 4.9.6
'@rollup/rollup-darwin-arm64': 4.9.6
'@rollup/rollup-darwin-x64': 4.9.6
'@rollup/rollup-linux-arm-gnueabihf': 4.9.6
'@rollup/rollup-linux-arm64-gnu': 4.9.6
'@rollup/rollup-linux-arm64-musl': 4.9.6
'@rollup/rollup-linux-riscv64-gnu': 4.9.6
'@rollup/rollup-linux-x64-gnu': 4.9.6
'@rollup/rollup-linux-x64-musl': 4.9.6
'@rollup/rollup-win32-arm64-msvc': 4.9.6
'@rollup/rollup-win32-ia32-msvc': 4.9.6
'@rollup/rollup-win32-x64-msvc': 4.9.6
'@rollup/rollup-android-arm-eabi': 4.10.0
'@rollup/rollup-android-arm64': 4.10.0
'@rollup/rollup-darwin-arm64': 4.10.0
'@rollup/rollup-darwin-x64': 4.10.0
'@rollup/rollup-linux-arm-gnueabihf': 4.10.0
'@rollup/rollup-linux-arm64-gnu': 4.10.0
'@rollup/rollup-linux-arm64-musl': 4.10.0
'@rollup/rollup-linux-riscv64-gnu': 4.10.0
'@rollup/rollup-linux-x64-gnu': 4.10.0
'@rollup/rollup-linux-x64-musl': 4.10.0
'@rollup/rollup-win32-arm64-msvc': 4.10.0
'@rollup/rollup-win32-ia32-msvc': 4.10.0
'@rollup/rollup-win32-x64-msvc': 4.10.0
fsevents: 2.3.3
dev: false
@ -4101,7 +4136,7 @@ packages:
prebuild-install: 7.1.1
semver: 7.6.0
simple-get: 4.0.1
tar-fs: 3.0.4
tar-fs: 3.0.5
tunnel-agent: 0.6.0
dev: false
optional: true
@ -4240,12 +4275,14 @@ packages:
- supports-color
dev: false
/streamx@2.15.7:
resolution: {integrity: sha512-NPEKS5+yjyo597eafGbKW5ujh7Sm6lDLHZQd/lRSz6S0VarpADBJItqfB4PnwpS+472oob1GX5cCY9vzfJpHUA==}
/streamx@2.15.8:
resolution: {integrity: sha512-6pwMeMY/SuISiRsuS8TeIrAzyFbG5gGPHFQsYjUr/pbBadaL1PCWmzKw+CHZSwainfvcF6Si6cVLq4XTEwswFQ==}
requiresBuild: true
dependencies:
fast-fifo: 1.3.2
queue-tick: 1.0.1
optionalDependencies:
bare-events: 2.2.0
dev: false
optional: true
@ -4358,16 +4395,16 @@ packages:
engines: {node: '>= 0.4'}
dev: false
/svelte-hmr@0.15.3(svelte@5.0.0-next.51):
/svelte-hmr@0.15.3(svelte@5.0.0-next.52):
resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==}
engines: {node: ^12.20 || ^14.13.1 || >= 16}
peerDependencies:
svelte: ^3.19.0 || ^4.0.0
dependencies:
svelte: 5.0.0-next.51
svelte: 5.0.0-next.52
dev: false
/svelte2tsx@0.6.27(svelte@5.0.0-next.51)(typescript@5.3.3):
/svelte2tsx@0.6.27(svelte@5.0.0-next.52)(typescript@5.3.3):
resolution: {integrity: sha512-E1uPW1o6VsbRz+nUk3fznZ2lSmCITAJoNu8AYefWSvIwE2pSB01i5sId4RMbWNzfcwCQl1DcgGShCPcldl4rvg==}
peerDependencies:
svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0
@ -4375,12 +4412,12 @@ packages:
dependencies:
dedent-js: 1.0.1
pascal-case: 3.1.2
svelte: 5.0.0-next.51
svelte: 5.0.0-next.52
typescript: 5.3.3
dev: false
/svelte@5.0.0-next.51:
resolution: {integrity: sha512-ZnHaCxbFdE4zEihtxt0vbw/ZiZbgm70krGj71bnYKERk0Djlq94cpgZRmqbR6grO1Ct9itRdtTwhu89OaHBnBg==}
/svelte@5.0.0-next.52:
resolution: {integrity: sha512-f7yhm97uEZx2QjLSMwlkq70nxepcaZ27FE+Hub1WTUuiRpigAs3y9M5x7abjJDbarp8604dBGNIe3Cp/5BRwAw==}
engines: {node: '>=18'}
dependencies:
'@ampproject/remapping': 2.2.1
@ -4419,13 +4456,15 @@ packages:
dev: false
optional: true
/tar-fs@3.0.4:
resolution: {integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==}
/tar-fs@3.0.5:
resolution: {integrity: sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==}
requiresBuild: true
dependencies:
mkdirp-classic: 0.5.3
pump: 3.0.0
tar-stream: 3.1.7
optionalDependencies:
bare-fs: 2.1.3
bare-path: 2.1.0
dev: false
optional: true
@ -4448,7 +4487,7 @@ packages:
dependencies:
b4a: 1.6.6
fast-fifo: 1.3.2
streamx: 2.15.7
streamx: 2.15.8
dev: false
optional: true
@ -4694,8 +4733,8 @@ packages:
vfile-message: 4.0.2
dev: false
/vite@5.1.0(sass@1.70.0):
resolution: {integrity: sha512-STmSFzhY4ljuhz14bg9LkMTk3d98IO6DIArnTY6MeBwiD1Za2StcQtz7fzOUnRCqrHSD5+OS2reg4HOz1eoLnw==}
/vite@5.1.1(sass@1.70.0):
resolution: {integrity: sha512-wclpAgY3F1tR7t9LL5CcHC41YPkQIpKUGeIuT8MdNwNZr6OqOTLs7JX5vIHAtzqLWXts0T+GDrh9pN2arneKqg==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@ -4724,13 +4763,13 @@ packages:
dependencies:
esbuild: 0.19.12
postcss: 8.4.35
rollup: 4.9.6
rollup: 4.10.0
sass: 1.70.0
optionalDependencies:
fsevents: 2.3.3
dev: false
/vitefu@0.2.5(vite@5.1.0):
/vitefu@0.2.5(vite@5.1.1):
resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==}
peerDependencies:
vite: ^3.0.0 || ^4.0.0 || ^5.0.0
@ -4738,7 +4777,7 @@ packages:
vite:
optional: true
dependencies:
vite: 5.1.0(sass@1.70.0)
vite: 5.1.1(sass@1.70.0)
dev: false
/web-namespaces@2.0.1:
@ -4853,3 +4892,9 @@ packages:
/zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
dev: false
file:../../Desktop/treesitter:
resolution: {directory: ../../Desktop/treesitter, type: directory}
name: treesitter
engines: {node: '>= 10'}
dev: true

View file

@ -83,7 +83,7 @@ One of the things which have helped me improve the state of my CSS stylesheets i
If we tried to rewrite the previous example into BEM, we could theoretically rewrite it as such:
```scss
```scss
.blog-post {
...
&--centered {
@ -105,7 +105,7 @@ BEM could devolve into writing separate "blocks" for each HTML element. We could
One problem that I have personally encountered with BEM is not being able to figure out how to approach the fact that a single "block" can have multiple variants. For instance, we could have three cards, each containing slightly different content:
```html
```html
<aside>
<section id="A" class="???">
Card with some content

89
src/styles/_kanagawa.scss Normal file
View file

@ -0,0 +1,89 @@
:root {
--kngw-fujiWhite: #DCD7BA; // Default foreground
--kngw-oldForeground: #C8C093; // Dark foreground (statuslines)
--kngw-sumiInk0: #16161D; // Dark background (statuslines and floating windows)
--kngw-sumiInk1: #1F1F28; // Default background
--kngw-sumiInk2: #2A2A37; // Lighter background (colorcolumn, folds)
--kngw-sumiInk3: #363646; // Lighter background (cursorline)
--kngw-sumiInk4: #54546D; // Darker foreground (line numbers, fold column, non-text characters), float borders
--kngw-waveBlue1: #223249; // Popup background, visual selection background
--kngw-waveBlue2: #2D4F67; // Popup selection background, search background
--kngw-winterGreen: #2B3328; // Diff Add (background)
--kngw-winterYellow: #49443C; // Diff Change (background)
--kngw-winterRed: #43242B; // Diff Deleted (background)
--kngw-winterBlue: #252535; // Diff Line (background)
--kngw-autumnGreen: #76946A; // Git Add
--kngw-autumnRed: #C34043; // Git Delete
--kngw-autumnYellow: #DCA561; // Git Change
--kngw-samuraiRed: #E82424; // Diagnostic Error
--kngw-roninYellow: #FF9E3B; // Diagnostic Warning
--kngw-waveAqua1: #6A9589; // Diagnostic Info
--kngw-dragonBlue: #658594; // Diagnostic Hint
--kngw-fujiGray: #727169; // Comments
--kngw-springViolet1: #938AA9; // Light foreground
--kngw-oniViolet: #957FB8; // Statements and Keywords
--kngw-crystalBlue: #7E9CD8; // Functions and Titles
--kngw-springViolet2: #9CABCA; // Brackets and punctuation
--kngw-springBlue: #7FB4CA; // Specials and builtin functions
--kngw-lightBlue: #A3D4D5; // Not used
--kngw-waveAqua2: #7AA89F; // Types
--kngw-springGreen: #98BB6C; // Strings
--kngw-boatYellow1: #938056; // Not used
--kngw-boatYellow2: #C0A36E; // Operators, RegEx
--kngw-carpYellow: #E6C384; // Identifiers
--kngw-sakuraPink: #D27E99; // Numbers
--kngw-waveRed: #E46876; // Standout specials 1 (builtin variables)
--kngw-peachRed: #FF5D62; // Standout specials 2 (exception handling, return)
--kngw-surimiOrange: #FFA066; // Constants, imports, booleans
--kngw-katanaGray: #717C7C; // Deprecated
}
.kanagawa {
background-color: var(--kngw-sumiInk1);
color: var(--kngw-fujiWhite);
.string {
color: var(--kngw-springGreen);
}
.type, .type-builtin {
color: var(--kngw-waveAqua2);
}
.keyword {
color: var(--kngw-oniViolet);
}
.constructor {
color: var(--kngw-springBlue);
}
.tag {
color: var(--kngw-springBlue);
}
.variable {
color: var(--kngw-fujiWhite);
}
.operator, .string-special {
color: var(--kngw-boatYellow2);
}
.comment {
color: var(--kngw-fujiGray);
}
.include {
color: var(--kngw-oniViolet);
}
.function {
color: var(--kngw-crystalBlue);
}
.property, .attribute {
color: var(--kngw-carpYellow);
}
}

View file

@ -4,6 +4,7 @@
@use 'fonts';
@use 'base';
@use 'markdown';
@use 'kanagawa';
// Components
@use 'components/map';

59
src/utils/treesitter.ts Normal file
View file

@ -0,0 +1,59 @@
import * as treesitter from '../../tools/treesitter/dist/index.js';
import { visit } from 'unist-util-visit';
function text(value: string) {
return {
type: 'text',
value,
}
}
function span(classes: string[], value: string) {
return {
type: 'element',
tagName: 'span',
properties: {
className: classes.map(c => c.replace('.', '-')).join(' '),
},
children: [
text(value),
]
}
}
export default function rehypeTreesitter() {
return function (tree: any) {
visit(tree, null, (node, _, parent) => {
if (node.tagName !== 'code' || parent.tagName !== 'pre') return;
parent.properties.className = ['kanagawa'];
const code = node.children?.[0].value;
const lang = node.properties.className?.[0].replace('language-', '');
if (!lang || !code) return;
const stack: string[] = [];
const children = (node.children = [] as any[] );
const events = treesitter.hl(lang, code);
for (const event of events) {
switch (event.kind) {
case 'text': {
const child = (stack.length)
? span(stack, event.text)
: text(event.text);
children.push(child);
} break;
case 'open': {
stack.push(event.name);
} break;
case 'close': {
stack.pop();
} break;
}
}
});
};
}

View file

@ -0,0 +1,2 @@
[target.x86_64-pc-windows-msvc]
rustflags = ["-C", "target-feature=+crt-static"]

197
tools/treesitter/.gitignore vendored Normal file
View file

@ -0,0 +1,197 @@
# Created by https://www.toptal.com/developers/gitignore/api/node
# Edit at https://www.toptal.com/developers/gitignore?templates=node
### Node ###
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# TypeScript v1 declaration files
typings/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
.env.test
# parcel-bundler cache (https://parceljs.org/)
.cache
# Next.js build output
.next
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# End of https://www.toptal.com/developers/gitignore/api/node
# Created by https://www.toptal.com/developers/gitignore/api/macos
# Edit at https://www.toptal.com/developers/gitignore?templates=macos
### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### macOS Patch ###
# iCloud generated files
*.icloud
# End of https://www.toptal.com/developers/gitignore/api/macos
# Created by https://www.toptal.com/developers/gitignore/api/windows
# Edit at https://www.toptal.com/developers/gitignore?templates=windows
### Windows ###
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
# End of https://www.toptal.com/developers/gitignore/api/windows
#Added by cargo
/target
Cargo.lock
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
*.node

View file

@ -0,0 +1,33 @@
[package]
edition = "2021"
name = "treesitter"
version = "0.0.0"
[lib]
crate-type = ["cdylib"]
[dependencies]
# Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix
napi = { version = "2.12.2", default-features = false, features = ["napi4"] }
napi-derive = "2.12.2"
once_cell = "1.19.0"
# Treesitter
tree-sitter = "0.20.10"
tree-sitter-highlight = "0.20.1"
# Languages
tree-sitter-css = "0.20.0"
tree-sitter-haskell = { git = "https://github.com/tree-sitter/tree-sitter-haskell", rev = "cf98de23e4285b8e6bcb57b050ef2326e2cc284b" }
tree-sitter-html = "0.20.0"
tree-sitter-javascript = "0.20.3"
tree-sitter-md = "0.1.7"
tree-sitter-rust = "0.20.4"
tree-sitter-typescript = "0.20.5"
[build-dependencies]
napi-build = "2.0.1"
[profile.release]
lto = true
strip = "symbols"

View file

@ -0,0 +1,5 @@
extern crate napi_build;
fn main() {
napi_build::setup();
}

View file

@ -0,0 +1,3 @@
# `xd-darwin-x64`
This is the **x86_64-apple-darwin** binary for `xd`

View file

@ -0,0 +1,18 @@
{
"name": "xd-darwin-x64",
"version": "0.0.0",
"os": [
"darwin"
],
"cpu": [
"x64"
],
"main": "xd.darwin-x64.node",
"files": [
"xd.darwin-x64.node"
],
"license": "MIT",
"engines": {
"node": ">= 10"
}
}

View file

@ -0,0 +1,3 @@
# `xd-linux-x64-gnu`
This is the **x86_64-unknown-linux-gnu** binary for `xd`

View file

@ -0,0 +1,21 @@
{
"name": "xd-linux-x64-gnu",
"version": "0.0.0",
"os": [
"linux"
],
"cpu": [
"x64"
],
"main": "xd.linux-x64-gnu.node",
"files": [
"xd.linux-x64-gnu.node"
],
"license": "MIT",
"engines": {
"node": ">= 10"
},
"libc": [
"glibc"
]
}

View file

@ -0,0 +1,3 @@
# `xd-win32-x64-msvc`
This is the **x86_64-pc-windows-msvc** binary for `xd`

View file

@ -0,0 +1,18 @@
{
"name": "xd-win32-x64-msvc",
"version": "0.0.0",
"os": [
"win32"
],
"cpu": [
"x64"
],
"main": "xd.win32-x64-msvc.node",
"files": [
"xd.win32-x64-msvc.node"
],
"license": "MIT",
"engines": {
"node": ">= 10"
}
}

View file

@ -0,0 +1,28 @@
{
"name": "treesitter",
"version": "0.0.0",
"main": "index.js",
"types": "index.d.ts",
"napi": {
"name": "treesitter",
"triples": {
"defaults": false
}
},
"license": "MIT",
"devDependencies": {
"@napi-rs/cli": "^2.18.0"
},
"engines": {
"node": ">= 10"
},
"scripts": {
"artifacts": "napi artifacts",
"build": "napi build dist --platform --js false --release",
"debug": "napi build dist --platform --js false",
"prepublishOnly": "napi prepublish -t npm",
"universal": "napi universal",
"version": "napi version"
},
"type": "module"
}

View file

@ -0,0 +1,18 @@
lockfileVersion: '6.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
devDependencies:
'@napi-rs/cli':
specifier: ^2.18.0
version: 2.18.0
packages:
/@napi-rs/cli@2.18.0:
resolution: {integrity: sha512-lfSRT7cs3iC4L+kv9suGYQEezn5Nii7Kpu+THsYVI0tA1Vh59LH45p4QADaD7hvIkmOz79eEGtoKQ9nAkAPkzA==}
engines: {node: '>= 10'}
hasBin: true
dev: true

View file

@ -0,0 +1,156 @@
use std::collections::HashMap;
use std::sync::Arc;
use once_cell::sync::Lazy;
use tree_sitter_highlight::HighlightConfiguration;
pub const NAMES: &[&str] = &[
"comment",
"attribute",
"carriage-return",
"comment",
"comment.documentation",
"constant",
"constant.builtin",
"constructor",
"constructor.builtin",
"embedded",
"error",
"escape",
"function",
"function.builtin",
"include",
"keyword",
"markup",
"markup.bold",
"markup.heading",
"markup.italic",
"markup.link",
"markup.link.url",
"markup.list",
"markup.list.checked",
"markup.list.numbered",
"markup.list.unchecked",
"markup.list.unnumbered",
"markup.quote",
"markup.raw",
"markup.raw.block",
"markup.raw.inline",
"markup.strikethrough",
"module",
"number",
"operator",
"property",
"property.builtin",
"punctuation",
"punctuation.bracket",
"punctuation.delimiter",
"punctuation.special",
"string",
"string.escape",
"string.regexp",
"string.special",
"string.special.symbol",
"tag",
"type",
"type.builtin",
"variable",
"variable.builtin",
"variable.member",
"variable.parameter",
];
pub static CONFIGS: Lazy<HashMap<&'static str, Arc<HighlightConfiguration>>> = Lazy::new(|| {
[
(
vec!["css", "scss"],
HighlightConfiguration::new(
tree_sitter_css::language(),
tree_sitter_css::HIGHLIGHTS_QUERY,
"",
"",
).unwrap()
),
(
vec!["hs", "haskell"],
HighlightConfiguration::new(
tree_sitter_haskell::language(),
tree_sitter_haskell::HIGHLIGHTS_QUERY,
"",
tree_sitter_haskell::LOCALS_QUERY,
).unwrap()
),
(
vec!["html", "html"],
HighlightConfiguration::new(
tree_sitter_html::language(),
tree_sitter_html::HIGHLIGHTS_QUERY,
tree_sitter_html::INJECTIONS_QUERY,
"",
).unwrap()
),
(
vec!["md", "markdown"],
HighlightConfiguration::new(
tree_sitter_md::language(),
// &format!("{}\n\n{}",
tree_sitter_md::HIGHLIGHT_QUERY_BLOCK,
// tree_sitter_md::HIGHLIGHT_QUERY_INLINE,
// ),
// &format!("{}\n\n{}",
tree_sitter_md::INJECTION_QUERY_BLOCK,
// tree_sitter_md::INJECTION_QUERY_INLINE,
// ),
""
).unwrap()
),
(
vec!["rs", "rust"],
HighlightConfiguration::new(
tree_sitter_rust::language(),
tree_sitter_rust::HIGHLIGHT_QUERY,
tree_sitter_rust::INJECTIONS_QUERY,
"",
).unwrap()
),
(
vec!["js", "javascript"],
HighlightConfiguration::new(
tree_sitter_javascript::language(),
tree_sitter_javascript::HIGHLIGHT_QUERY,
tree_sitter_javascript::INJECTION_QUERY,
tree_sitter_javascript::LOCALS_QUERY,
).unwrap()
),
(
vec!["jsx"],
HighlightConfiguration::new(
tree_sitter_javascript::language(),
tree_sitter_javascript::JSX_HIGHLIGHT_QUERY,
tree_sitter_javascript::INJECTION_QUERY,
tree_sitter_javascript::LOCALS_QUERY,
).unwrap()
),
(
vec!["ts", "typescript"],
HighlightConfiguration::new(
tree_sitter_typescript::language_typescript(),
&format!("{}\n\n{}",
tree_sitter_javascript::HIGHLIGHT_QUERY,
tree_sitter_typescript::HIGHLIGHT_QUERY
),
tree_sitter_javascript::INJECTION_QUERY,
tree_sitter_typescript::LOCALS_QUERY,
).unwrap()
),
]
.into_iter()
.flat_map(|(keys, mut config)| {
config.configure(NAMES);
let config = Arc::new(config);
keys.into_iter().map(move |key| (key, config.clone()))
})
.collect()
});

View file

@ -0,0 +1,54 @@
#![deny(clippy::all)]
mod configs;
use std::collections::HashMap;
use tree_sitter_highlight::Highlighter;
use tree_sitter_highlight::HighlightEvent;
use configs::{CONFIGS, NAMES};
#[macro_use]
extern crate napi_derive;
#[napi]
pub fn hl(lang: String, src: String) -> Vec<HashMap<String, String>> {
let config = match CONFIGS.get(&*lang) {
Some(c) => c,
None => return vec![
HashMap::from([
("kind".into(), "text".into()),
("text".into(), src.into())
])
]
};
let mut highlighter = Highlighter::new();
let highlights = highlighter.highlight(
&config,
src.as_bytes(),
None,
|key| CONFIGS.get(key).map(|arc| arc.as_ref())
).unwrap();
let mut out = vec![];
for event in highlights {
match event.unwrap() {
HighlightEvent::Source {start, end} => out.push(HashMap::from([
("kind".into(), "text".into()),
("text".into(), src[start..end].into())
])),
HighlightEvent::HighlightStart(s) => out.push(HashMap::from([
("kind".into(), "open".into()),
("name".into(), NAMES[s.0].into())
])),
HighlightEvent::HighlightEnd => out.push(HashMap::from([
("kind".into(), "close".into())
]))
}
}
out
}