leaysgur's Blog
leaysgur.github.io/
Prettierとプラグインの仕組み
この記事では、Prettierのプラグインの仕組みについて詳しく説明しています。Prettierのプラグインは、新しい言語やフォーマットルールを追加するためのもので、主にPrettierがサポートしていない拡張子を扱うために使用されます。プラグインは、特定の拡張子に対して利用するパーサーやASTを出力する関数、オプションのスキーマなどを定義するJavaScriptモジュールとして実装されます。Prettier本体は、プラグインを読み込み、拡張子リストを更新し、ファイル処理時に適切なプラグインを選択します。人気のプラグインとしては、prettier-plugin-astroやprettier-plugin-svelteなどがあり、それぞれ特定のファイル形式に対してパーサーを指定して処理を行います。 • Prettierのプラグインは新しい言語やフォーマットルールを追加するための仕組みである。 • プラグインは特定の拡張子に対して利用するパーサーやASTを出力する関数を定義する。 • Prettier本体はプラグインを読み込み、拡張子リストを更新し、ファイル処理時に適切なプラグインを選択する。 • 人気のプラグインにはprettier-plugin-astroやprettier-plugin-svelteがあり、特定のファイル形式に対してパーサーを指定して処理を行う。 • プラグインの実装には、ASTを走査するための汎用的なクラスAstPathが使用される。
コードフォーマッターはコードを削除することもある
この記事では、コードフォーマッターがコードの一部を削除することがあるという現象について説明しています。一般的には、コードフォーマッターはコードの挙動を変えないと考えられていますが、実際には特定の条件下でAST(抽象構文木)の構造が変わることがあります。例えば、空のステートメントや不要な括弧が削除されることがあり、これによりASTの差分が生じます。また、オブジェクトのキーのクオートの有無や、TypeScriptの型リテラルにおいても同様の変化が見られます。JSXにおいても空白や改行が消えることがあり、これがCSSの挙動に影響を与えることもあります。最終的に、フォーマッターがコードを消すことがあるという点について、著者は不満を表明しています。 • コードフォーマッターは特定の条件下でコードの一部を削除することがある。 • フォーマッターはコードの挙動を変えないと一般的に考えられているが、ASTの構造が変わることがある。 • 空のステートメントや不要な括弧が削除されることでASTの差分が生じる。 • オブジェクトのキーのクオートの有無によってASTの構造が変わる。 • JSXにおいても空白や改行が消えることがあり、これがCSSの挙動に影響を与える。 • 著者はフォーマッターによるコードの削除に不満を表明している。
Svelte Japan Offline Meetup #5 に行ってきたメモ #sveltejapan
この記事は、Svelte Japan Offline Meetup #5に関するメモをまとめたもので、SvelteKitの新機能やESLintルール、Remote Functionsの利用方法について詳しく説明しています。特に、SvelteKitのドキュメントを参考にしながら、名前付きActionやコントローラーの概念を理解する過程が述べられています。また、ESLintプラグインのメンテナンスや便利なルールの紹介、Remote Functionsを用いたデータ取得のコロケーション手法についても触れています。さらに、SvelteのアクセシビリティやMCPのデバッグツール、可観測性の実装についても言及されています。全体として、Svelteの最新技術や実践的なアプローチが紹介されており、開発者にとって有益な情報が提供されています。 • SvelteKitのドキュメントを参考にした名前付きActionの理解 • ESLintプラグインの便利なルールの紹介 • Remote Functionsを用いたデータ取得のコロケーション手法 • Svelteのアクセシビリティに関する最新情報 • MCPのデバッグツールや可観測性の実装についての説明
JSからRustのコードを実行し、RustからもJSのコードを実行する
この記事では、RustとJavaScript(JS)間での相互実行を可能にするnapi-rsフレームワークについて説明しています。napi-rsを使用することで、RustからJSの関数を呼び出したり、JSからRustの関数を呼び出したりすることが簡単にできます。具体的には、Rustで定義した関数に#[napi]アトリビュートを付けることで、JSから呼び出せるようになります。また、WASM向けのビルドにも対応しており、ブラウザでの実行も可能です。RustからJSを呼び出す際には、コールバック関数を渡すことができ、非同期処理や複数引数の渡し方など、さまざまな要件に応じたAPIの使用が可能です。 • RustとJS間での相互実行が可能になるnapi-rsフレームワークの紹介 • RustからJSの関数を呼び出すための簡単な実装方法 • JSからRustの関数を呼び出す際のコールバック機能の利用 • WASM向けのビルドに対応し、ブラウザでの実行も可能 • 非同期処理や複数引数の渡し方など、APIの柔軟な使用が可能