並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 109件

新着順 人気順

ASTの検索結果1 - 40 件 / 109件

ASTに関するエントリは109件あります。 javascriptTypeScripttechfeed などが関連タグです。 人気エントリには 『現代フロントエンドに欠かせないwebpackとBabelを理解しよう』などがあります。
  • 現代フロントエンドに欠かせないwebpackとBabelを理解しよう

    Transcript ݱ୅ϑϩϯτΤϯυʹ͔ܽͤͳ͍
 XFCQBDLͱ#BCFMΛཧղ͠Α͏ʂ� CVJMEFSTDPO�UPLZP����� /BNF� ����4BLJUP�.VLBJ� 5XJUUFS
 ����!@@TBLJUP@@� $PNQBOZ� ����$ZCP[V�JOD�
 ����'SPOUFOE�&YQFSU�5FBN "CPVU�NF w#BCFMͷલʹݱࡏͷ+BWB4DSJQUʹ͍ͭͯ� w#BCFMʹ͍ͭͯ� wXFCQBDLʹ͍ͭͯ� wXFCQBDL #BCFMͰ಺෦࣮૷Λ௥͍ͬͯ͘ "HFOEB #BCFMͷલʹݱࡏͷ+BWB4DSJQUʹ͍ͭͯ &$."4DSJQUͱ5$�� w+BWB4DSJQUʹ͸&$."4DSJQUͱ͍͏ݴޠ࢓༷͕͋Δ� w͜ͷݴޠ࢓༷ΛܾΊ͍ͯΔҕһձ͕5$��
 5FDIOJDBM�$PNNJUUFF��� � w&4��

      現代フロントエンドに欠かせないwebpackとBabelを理解しよう
    • データベースの仕組み(アーキテクチャ)をざっくり理解する

      フリーランスエンジニアをしているrevenue-hackです! 普段はGo言語でバックエンドを中心にやっています〜 ↓登壇したときの資料です! より図を入れて詳しく書いております! 今回はデータベースの特にRDBの仕組み(アーキテクチャ)についてざっくり理解して、なにかに役立てようぜ〜 というような内容になります。 ↓記事はこちらに移しました!↓

        データベースの仕組み(アーキテクチャ)をざっくり理解する
      • 新言語『TypoScript』を作った - Qiita

        この記事は、クソアプリAdvent Calendar2021の20日目(ホノルル時間)の記事であると同時に、GMOペパボエンジニア Advent Calendar 2021の21日目(日本時間)の記事でもあります。 みなさん、TypeScript使ってますか?TypeScriptはJavaScriptの世界に秩序をもたらす素晴らしい言語ですね。 しかし世界には光の秩序だけでなく闇の混沌も必要です。 という訳で、JavaScriptに闇の混沌をもたらす新言語を作ってみました。 その名も『TypoScript』です。 TypoScript is 何 TypoScriptとは何か。まずはこちらのコードをご覧ください。 function fizz_buzz(count) { for (var i = 1; i <= caunt; i++) { if (i % 3 === 0 && i % 5 ==

          新言語『TypoScript』を作った - Qiita
        • 大統一 Node ツールチェイン Rome の野望 現状の実装

          つい先日 beta リリースされたフロントエンドのツールチェインの Rome について、その思想とコードを読んだ結果の現状について。 Rome Frontend Toolchain この記事は公式ドキュメント以外にもソースを読んで得られた undocumented な部分も含んでいるので、すぐ古くなる。その前提で読むように。 問題の認識とその解決手段 フロントエンドの最適化は実行前のプリプロセスに、エコシステムの開発リソースの多くが当てられている。Node のツールチェインが発達するにつれて、自前の パーサ+AST 定義を持つ実装が増えていった歴史がある。 acorn(estree) babel prettier typescript terser それぞれのツールの生成する AST はそのツールの都合で微妙に/もしくは大幅に定義がずれている。typescript に至っては完全に別物。こ

            大統一 Node ツールチェイン Rome の野望 現状の実装
          • エンケラドゥス、生命存在の可能性高まる。噴出した水溶性の有機化合物を発見

            土星の衛星「エンケラドゥス」から宇宙空間へ噴出した氷粒に、これまで未確認だった有機化合物が含まれていたことがわかりました。NASAのジェット推進研究所(JPL)と欧州宇宙機関(ESA)から10月2日付で発表されています。 カッシーニが撮影した土星の衛星「エンケラドゥス」の疑似カラー画像(Credit: NASA/JPL/Space Science Institute)■アミノ酸につながる有機化合物の存在を確認見つかったのは、窒素を含むアミンや、酸素を含むカルボニル基を持った有機化合物です。これらの化合物は、地球ではアミノ酸の生成にも関与することが知られています。 今回見つかった有機化合物は、Nozair Khawaja氏らの研究チームによって、2017年にミッションを終えた土星探査機「カッシーニ」による土星の「E環」と呼ばれる環の観測データを解析することで発見されました。 E環は土星の環の

              エンケラドゥス、生命存在の可能性高まる。噴出した水溶性の有機化合物を発見
            • TypeScriptで世界一型安全な型レベルSQL Interpreterを作っている話

              こんにちは。DevOps芸人と化して久しいAndyです。 2020年の秋にTypeScript 4.1へTemplate Literal Typesが導入され、そのインパクトに俄かに一部の界隈がザワついたのは記憶に新しいかと思います。 今回は型プログラミングの可能性を大いに押し広げたTemplate Literal Typesを用いてSQL文を型レベルで解析し、その実行結果を型情報として導出するためのsqlptureというライブラリを作ったので紹介します。 Embedded content: https://github.com/andoshin11/sqlpture SQLの実行/検証対象はPostgreSQL v13です。 tl;dr SQL文を型レベルで解析・評価して返り値型を取得できるmini interpreterを作ったよ 型レベルのSQL validatorも作ってるよ 実際

                TypeScriptで世界一型安全な型レベルSQL Interpreterを作っている話
              • Puppeteerで不要なCSSを消す - Cybozu Inside Out | サイボウズエンジニアのブログ

                こんにちは。フロントエンドエキスパートチームの穴井(@pirosikick)です。福岡在住で、普段は福岡のweworkで働いています。他のメンバーは皆、東京に居てリモートで仕事をしていますが、モブでわいわい開発していますし、weworkが快適すぎて、毎日楽しいです! フロントエンドエキスパートチームでは、サイボウズの各プロダクトが抱えるWebフロントエンドの課題を解決するのが仕事の一つです。 blog.cybozu.io 最近の取り組みとして、Puppeteerで不要なCSSを消した事例を紹介します。 このブログは、6/19に福岡で開催した「Google I/O '19のWebをまとめる会」で登壇したときの内容を詳細に説明しつつ、アップデートした部分もあるので、発表見たぞ、スライド見たぞという方も見ていただけますと幸いです。 speakerdeck.com きっかけ とあるプロダクトのCS

                  Puppeteerで不要なCSSを消す - Cybozu Inside Out | サイボウズエンジニアのブログ
                • Ruby中間表現のバイナリ出力を改善する - クックパッド開発者ブログ

                  Ruby 開発チームに4週間インターン生として参加いたしました、永山 (GitHub: NagayamaRyoga) です。 私は「Ruby中間表現のバイナリ出力の改善」という課題に取り組み、Railsアプリケーションのコンパイルキャッシュのサイズを70%以上削減することに成功しました。以下ではこの課題の概要とその成果について述べたいと思います。 InstructionSequenceの概要 まず、RubyVM 内で実行される命令の中間表現、InstructionSequence (以下 ISeq と省略) について簡単に説明します。 通常の Ruby プログラムは、以下のような手順で実行されます。 ソースコードを構文解析し、抽象構文木を作る。 抽象構文木をコンパイルして、ISeq を作る。 RubyVM (YARV) で ISeq を解釈し、実行する。 ISeq は、このように Ruby

                    Ruby中間表現のバイナリ出力を改善する - クックパッド開発者ブログ
                  • Grit

                    Grit automatically fixes technical debt by combining static analysis and machine learning to generate pull requests that clean up code and migrate to the latest frameworks.

                      Grit
                    • 全ての道はRomeへ続くのか - これからのJavascript開発を考える

                      Romeとは 現代のJavascript開発には多くのツールチェーンが必要とされます。Babel,webpack,Jest,ESLint,Prettier,Typescriptなどを組み合わせて開発することが多く、さらにこれらの一部代替選としてesbuild,SWC,Viteなどのツールチェーンの選択肢が存在し、選択肢の多さやその組み合わせの複雑さに苦い思いをしたことがある方も少なくないのではないと思います。 こうした中で、新たに開発が進められているツールチェーン、Romeをご存知でしょうか? Romeは先に挙げたように複数のツールチェーンを役割ごとに組み合わせて使うのではなく、1つのツールチェーンでこれら全ての役割を担ってしまおうという壮大な計画を持つツールチェーンです。 Romeは2020/03にFacebookより発表されました。現在は法人化され、yarnやBabelの生みの親である

                        全ての道はRomeへ続くのか - これからのJavascript開発を考える
                      • コードとビジュアルの双方向編集なエディタを試作して ビジュアルプログラミングについて考えてみた

                        ノーコードは形を変えた現代の RPG ツクールなのではないか - mizdev の記事では、ノーコードのビジュアルプログラミングが発展性を欠く理由として、次の理由を挙げました。 汎用的なビジュアルプログラミング基盤(Scratch みたいなものではなくプロユースなもの) ↑ 上でのビジュアル環境でのデータベースのグラフ構造のビジュアル化手法 ↑ 上でのビジュアル環境でのパイプラインのビジュアル化手法 ↑ 上での UI とデータと UI のマッピングのビジュアル化手法 これらを隠蔽してオートスケールするマネージレスなインフラ基盤(これはパイプライン実装の中身) で、こんなものを作った話 現代の Intellisense + Formatter 感覚 TypeScript の補完と、保存の度に prettier をバリバリに効かせた状態でプログラミングをしていると、そもそも自由文脈でコードを書

                          コードとビジュアルの双方向編集なエディタを試作して ビジュアルプログラミングについて考えてみた
                        • ast-grep VSCode: 構造検索と置換の強力なツール

                          こんにちは、 ast-grepの作者Herringtonです。 正規表現でコードを検索したことがある方なら、複数行のマッチングや入れ子構造の処理、コメントの無視などに苦労したことがあるかもしれません。 そこで、ast-grep VSCodeという新しい拡張を紹介します。これは、構造的検索と置換(SSR)という技術を利用して、より正確で効率的な検索と置換を実現するツールです。 構造検索は? テキスト検索と置換の限界 例えば、JavaScriptコードをリファクタリングして、lodash の _.filter 関数をネイティブの Array.prototype.filter メソッド に置き換えたいとします。単純なテキスト検索と置換は次のようになります: これは一部のケースではうまくいくかもしれませんが、いくつかの問題があります。 一行の式しかマッチングできません。コードが複数行にまたがってい

                            ast-grep VSCode: 構造検索と置換の強力なツール
                          • Maintainer Month: なぜtextlintを作ったか

                            今では200以上のルールがある自然言語のLintツールであるtextlintがどのように作られたかを振り返る記事です。 6月はMaintainer MonthというイベントをGitHubが主催しています。 Maintainer Month is a reminder for the ecosystem to support, celebrate, and compensate open source maintainers. – Maintainer Month Maintainer Monthは、オープンソースのメンテナーが集まって情報共有したり、メンテナーを祝ったり、支援したりするイベントです。 メンテナーがどういうサポートを求めているかを知る、負荷が特定の箇所に集中するエコシステムはバランスが悪いのでそれを支援する方法を知るといったことを思い出すのがMaintainer Monthの

                              Maintainer Month: なぜtextlintを作ったか
                            • JavaScriptのリファクタリングツール「jscodeshift」の使い方 - Qiita

                              はじめに JavaScriptのコードを一括で変換したり修正したい場合、正規表現などを使い置換しますか? シンプルなケースであればそれでも問題ないですが、複雑な変換であればASTベースでコードを自在に変換できる「jscodeshift」が便利です。 jscodeshiftを利用すると、以下のようなことができます。 例) functionで書かれた関数をアロー関数に一括で変換 target/arrow-function/index.js const fn = function() { console.log("foo"); }.bind(this); [1, 2, 3].map(function(v) { return v * v; }); Promise.resolve() .then(function() { console.log("foo"); }) .then(function()

                                JavaScriptのリファクタリングツール「jscodeshift」の使い方 - Qiita
                              • JavaScriptでObjectに空のStringを足すと0になる!?……わけではなかった

                                ASTをみてみよう この不思議な現象を調査するために、AST(Abstract Syntax Tree: 抽象構文木)の状態を見てみることにしました。ASTはソースコードを構文解析した結果をツリー構造にしたもので、AST Explorerを使うと簡単に見ることができます。 ({}) + "" のAST ({}) + "" のASTをみると、ひとつの ExpressionStatement となっているのがわかります。ExpressionStatement の leftは ObjectExpression 、 operator は + 、rightは Literal となっていて、たしかに Object と String の足し算になっています。これなら確かに"[object Object]" が返ってくるでしょう。 {} + ""のAST しかし、{} + "" のASTをみると、Bloc

                                  JavaScriptでObjectに空のStringを足すと0になる!?……わけではなかった
                                • Graydon HoareのCompiler講義資料が面白かった話 - Arantium Maestum

                                  Graydon Hoareが2019年にカナダのブリティッシュ・コロンビア大学でコンパイラ関連のゲスト講義した時の資料21 compilers and 3 orders of magnitude in 60 minutes - a wander through a weird landscape to the heart of compilationを読んだら大変面白かったのでメモ。 作者 Graydon HoareはMozillaでRustを開発したことで有名。その後Rustの開発もMozillaも離れて(というかRustの開発からは2013年に離れたようだ)、一時期AppleでSwift開発チームに所属していたらしい。(ソース:Reddit: I wonder, why Graydon Hoare, the author of Rust, stopped contributing in

                                    Graydon HoareのCompiler講義資料が面白かった話 - Arantium Maestum
                                  • Content EditableでWYSIWYGエディタ作るの楽しい! - maru source

                                    こんにちは丸山@h13i32maruです。 僕は今、Ubie Discoveryで医療従事者向けのカルテエディタを作っています。人生で初めてContent Editableを使ってエディタを作ってるんですが、それがすごく楽しいです!というのも、エディタを作るには色々技術的な課題があります。例えば、テキストをパースするには?ASTからHTMLをビルドするには?パフォーマンスのよい更新方法は?などなど。それらの技術的な課題を解決していくのが単純に楽しいという感じです。また、車輪の再発明は極力抑えつつ、自分たちのプロダクトでやりたいことを実現できるような工夫もしています。 というわけで、今回はそんなエディタ作りで取り組んだ課題と解決策を紹介していきたいと思います。 (訳: 楽しかったので、誰かに聞いてもらいたい!) エディタの概要 メンテしやすいテキストパーサ - PEG.js メンテしやすいH

                                      Content EditableでWYSIWYGエディタ作るの楽しい! - maru source
                                    • Generate React Component with TypeScript AST

                                      理解して導入するWebフレームワーク ~解決すべき課題に着目する~ / Understanding and implementing web frameworks ~focusing on the problems to be solved~

                                        Generate React Component with TypeScript AST
                                      • 「Go言語でつくるインタプリタ」をRustで実装しました。 - Sansan Tech Blog

                                        はじめに こんにちは。DSOC 研究開発部 Architect Group Data Direction Teamの有山です。 気温が上がってきて夏っぽくなってきましたね。毎年夏用にTシャツを集めるのが趣味なのですが、今年は個人的にブームが再燃してるGOODENOUGH*1を古着で集めようかなと考えています。 ところで皆さんは普段何の言語を書いていますか? Data Direction Groupでは主にPythonを使用していますが、ある時から四則演算の計算順序やif文の条件分岐はどうして正しく動くのだろうと疑問に思うようになり、実際に正しく動かしているシステムを理解してみたくなりました。色々検討した結果、「Go言語で作るインタプリタ」という本が内容的にも分量的にもちょうどよく、これを読み進めることにしました。 初めは読みながらコードを写経していましたが、複雑なロジックについては理解した

                                          「Go言語でつくるインタプリタ」をRustで実装しました。 - Sansan Tech Blog
                                        • node modules なし blog を作っている話 | maxmellon's blog

                                          node modules なし blog を作っている話今年の9月頃から,no dependencies で blog を作っています.(devDependencies には,jest と TypeScript を入れています) 正直,フレームワークを使えば blog くらいならすぐ作れるだろうと思っていたのと, フレームワークの使い方を覚えることが自分の成長に大きくつながるとは感じることができず, やっていて楽しい + 学習する余地がありそうな no dependencies で blog を作ることにしました. リポジトリはこちらです maxmellon/kajitsu 機能要件を考えるざっくり,自分がほしいなと思った要件を整理すると, markdown で記事を書きたいblog だけじゃなくて cookie や Cache-Controll header などを検証できる sandb

                                          • OpenAPI SchemaからTypeScript Code Generatorを作ったので紹介します

                                            他言語からTypeScriptに変換する記事を観測したので、JSONSchemaを経由してTypeScriptのコードに吐き出すライブラリを作りました。本記事のコアロジックの部分を抽出した形です。 OpenAPI TypeScript Code Generatorとの違いとして、ルートの名前空間を廃止しているので、割と自由に書ける様になってます。 https://www.npmjs.com/package/@himenon/jsonschema2ts

                                              OpenAPI SchemaからTypeScript Code Generatorを作ったので紹介します
                                            • たった1行から始めるPythonのAST(抽象構文木)入門 - Qiita

                                              はじめに この記事は2020年のRevCommアドベントカレンダー20日目の記事です。 19日目は@metal-presidentさんの「モバイルチームの成長とKMM導入に向けて」でした。 11月に株式会社RevCommに入社した@rhoboroです。 前職では主にGCP x Pythonで、現職では主にAWS x Pythonで日々業務を行なっています。 RevCommでは広島県の尾道からフルリモートワークで働いているので、そういった働き方にもし興味があればこちらの記事もご覧ください。 それでは、本題に入ります。 PythonのAST(抽象構文木)とは? この記事は、PythonのAST(抽象構文木、Astract Syntax Tree)に触れたことのない方を対象にしたASTの入門記事です。 そもそもASTとは何なのか、ASTを理解すると何ができるのかを中心に紹介していきます。 さっそ

                                                たった1行から始めるPythonのAST(抽象構文木)入門 - Qiita
                                              • TypeScriptリポジトリの歩き方 - Qiita

                                                * こちらはオプトテクノロジーズ社内勉強会での発表資料になります TypeScript リポジトリの歩き方 TypeScript のコードリーディングのはじめの一歩としてどこから手を付ければ良いのかを知る手助けになればと思いこさえました 目次 コードベースの概観についてドキュメントから知る 実装のエントリポイントから読み進める 動かして試す 自分が実際にコードリーディングしたときの例 コードベースの概観についてドキュメントから知る まず TypeScript の内部アーキテクチャの概観について知っていきましょう TypeScript の wiki が大変参考になります Architectural Overview: コード上のコンポーネントを図示しつつ説明している Layer Overview や全体で利用されているデータ構造を説明する Data Structures といった、実装を理解

                                                  TypeScriptリポジトリの歩き方 - Qiita
                                                • 作って理解する Babel プラグイン - Techtouch Developers Blog

                                                  エンジニアの伊藤です。 ようやく梅雨が開けたと思ったらすでに立秋。残暑は残るどころか日に日に増している感じさえあります… 🥵 。 この記事では、普段の開発で非常にお世話になっているツール Babel のプラグインを作成する方法と、Babel プラグインの例としての処理時間を計測するプロファイラを紹介します。Babel プラグインに踏み込んでいきたいのですが、理解を助けるためにまず Babel が何をするツールなのかから説明します。 Babelとは Babel の処理の流れ AST (Abstract Syntax Tree) Babel プラグイン Babel プラグイン プロジェクト最小構成 Hello World 「プロファイラ」で何をするのか まとめ Babel プラグイン開発に参考になったサイト おまけ Babelとは フロントエンドの開発を行っている方にはお馴染みな Babel

                                                    作って理解する Babel プラグイン - Techtouch Developers Blog
                                                  • 入れ子構造を自由に拡張する – TypeScript版「Trees that Grow」 | IIJ Engineers Blog

                                                    日本Haskellユーザーグループ(愛称 Haskell-jp)発起人の一人にして、Haskell-jpで一番のおしゃべり。 HaskellとWebAssemblyとプリキュアとポムポムプリンをこよなく愛する。 This is a Japanese translation of Flexiblly Extend Nested Structures – “Trees that Grow” in TypeScript. 抽象構文木(AST, Abstract Syntax Tree)の扱いに慣れた一部のHaskell開発者の間では、「Trees that Grow」というイディオムが一般的で、Haskellの最も有名なコンパイラ、GHCにおいても採用されています。今回は、この「Trees that Grow」をTypeScriptで実現するにはどうすれば良いかを共有しましょう。 あらまし Ha

                                                      入れ子構造を自由に拡張する – TypeScript版「Trees that Grow」 | IIJ Engineers Blog
                                                    • module bundlerの作り方(準備編) - hiroppy's site

                                                      今回は中身がどう動いているかを解説したいと思います。 最初のこの記事では、最低限の実装を説明していくことにします。 webpack のアルゴリズムの仕組みはこちらを読んでください。 必要なステップ 必要なステップは以下の 3 つです。 エントリーポイントからのすべてのモジュールを走査し、requireを解決後にユニーク id を付与していく コード内のモジュールパス(requireの引数(e.g. ./module.js))を id へ置換する runtime のコードテンプレートの作成 IIFE(即時関数)箇所とそれに付随する引数の module 群 この実装されあれば、動くコードはできます。(2 つめは optional でもいいけど後からつらくなる) モジュール解決 今回は説明しやすいように関数を 2 つに分けています。 すべてのモジュールの把握と ID 作成 コード内の requi

                                                        module bundlerの作り方(準備編) - hiroppy's site
                                                      • Rust AST 入門

                                                        これは、簡単な Rust の AST をざっと読めるようになる、もしくは該当のドキュメントを読めるようになる、といったことを目的としたものである。入門といっても網羅的なものではなく、雰囲気を掴んでほしいという意味合いで書いたものであって細かいところまでは説明しないつもりである。なお Rust には型などより多くの情報も含む HIR などいくつかの AST があるが、ここではコンパイル時に最初に作られる AST についてのみふれる。 プログラミング言語で一般的に述べられる AST 自体についてはここでは説明しないので他を参照するとよい。有用そうなもののリンクは以下の通りである。 ASTs - What are they and how to use them Crafting Interpreters また、AST を確認するというと AST explorer も有用だが、 AST expl

                                                          Rust AST 入門
                                                        • Pythonを使って関数型プログラミング Part.1

                                                          2019年9月16、17日、日本最大のPythonの祭典である「PyCon JP 2019」が開催されました。「Python New Era」をキャッチコピーに、日本だけでなく世界各地からPythonエンジニアたちが一堂に会し、さまざまな知見を共有します。プレゼンテーション「Pythonで始めてみよう関数型プログラミング」に登壇したのは、株式会社SQUEEZEの寺嶋哲氏。講演資料はこちら なぜ関数型プログラミングを愛するようになったのか 寺嶋哲氏:それでは発表を始めます。まず「おまえ誰よ?」。はい、寺嶋哲といいます。Twitterなどでは「@meganehouser」というIDでやっています。 所属は株式会社SQUEEZE(スクイーズ)で、ふだんはPython、Django、Django REST frameworkでバックエンドを書いて、AngularJS、Angularでフロン

                                                            Pythonを使って関数型プログラミング Part.1
                                                          • Rust製TypeScriptコンパイラstcの現状と今後 | メルカリエンジニアリング

                                                            この記事は、Merpay Tech Openness Month 2023 の2日目の記事です。 メルペイFrontendエンジニアの@togami2864です。普段はPartner Platformというチームで加盟店申込みフォームや審査・管理を行うためのMerchant Supportツールの開発・運用を担当しています。 本記事ではRust製TypeScriptコンパイラであるstcについて筆者の観測範囲での概要、開発状況、課題等を紹介します。なお、内容は全て2023年5月時点のものです。また、本記事の一部は Node学園 41時限目 書籍について で発表したものと重複していることをご了承ください。 概要 stcは2022年10月にオープンソース化されたRust製のTypeScriptコンパイラです。 https://github.com/dudykr/stc 製作者はRust製のトラ

                                                              Rust製TypeScriptコンパイラstcの現状と今後 | メルカリエンジニアリング
                                                            • Semgrepを使った構文木ベースの検索と置換でコードのリファクタリングをする

                                                              Semgrepはr2cという会社/サービスが開発しているツールです。 Semgrepの特徴としてTree-sitterでコードをパースしたConcrete Syntax Tree(CST)の構文木をベースにして検索や置換ができます。 コードをCSTにパースした構文木に対して検索/置換することで、ただの文字列検索/置換に比べてミスマッチしない検索/置換ができます。 例えば、次のa.js、b.js、c.jsはそれぞれevalを使っていますが、スタイルは違いますが意味はほとんど同じです。 // a.js eval("const a = 1, b = 2; eval(a + b);"); // b.js eval('const a = 1, b = 2;\ eval(a + b);'); // c.js eval(`const a = 1, b = 2; eval(a + b);`); $ sem

                                                                Semgrepを使った構文木ベースの検索と置換でコードのリファクタリングをする
                                                              • Prettier のしくみ

                                                                2019年7月30日のginzajsのLT資料です

                                                                  Prettier のしくみ
                                                                • 技術的負債の返済の足がかりにテンプレートのParserを作った話 - LIFULL Creators Blog

                                                                  プロダクトエンジニアリング部の中島です。 今回はフロントエンドのテンプレート部分についての負債やレガシーな機構に対する改善の取り組みについて紹介させていただきます。 背景 LIFULL社のメインサービスであるLIFULL HOME'SのメインリポジトリのサーバサイドはSymfony + Twig(※テンプレートエンジン)の構成を採用しています。 このリポジトリの歴史は古く、2011年頃から開発は行われており、今となってはレガシーな機構であったり、開発体験を損ねる負債的な記述も多くあります。 テンプレート部分で多くみられる問題のうちいくつかをピックアップすると弊社ではこのようなものが悩みのタネになっています 変数などを用いた動的な部分テンプレートの呼び出しによるgrepしやすさの低下 部分テンプレートをロードするときにスコープ制御(Twigだとonly属性)をつけ忘れてテンプレート間依存関係

                                                                    技術的負債の返済の足がかりにテンプレートのParserを作った話 - LIFULL Creators Blog
                                                                  • Google の SQL parser/analyzer の ZetaSQL とは何であるか

                                                                    2019年4月に Google の SQL parser/analyzer の ZetaSQL が公開されました。 現在 BigQuery Standard SQL や Cloud Spanner で実装されている SQL 方言であり、 Cloud Next 2019 で BigQuery UI から Cloud Dataflow で実行されるパイプラインを記述できる機能として発表された Cloud Dataflow SQL にも使われることがツイートからも見て取れます。 ZetaSQL については Google の外の人がまともに言及しているのを見たことがなく、聞いたことがないか様子見という人が多いと思うので分かっていることを書いていきます。 既存の文献から見る素性ZetaSQL は Spanner の SQL 実装について書かれた Spanner: Becoming a SQL Sys

                                                                    • Pythonを使って関数型プログラミング Part.2

                                                                      2019年9月16、17日、日本最大のPythonの祭典である「PyCon JP 2019」が開催されました。「Python New Era」をキャッチコピーに、日本だけでなく世界各地からPythonエンジニアたちが一堂に会し、さまざまな知見を共有します。プレゼンテーション「Pythonで始めてみよう関数型プログラミング」に登壇したのは、株式会社SQUEEZEの寺嶋哲氏。講演資料はこちら 不変/永続データ構造を提供するパッケージ 寺嶋哲氏:続いて、不変/永続データ構造についてです。 listを操作する関数の問題点について、例題で見ていきましょう。add_mangoは果物名の文字列のlistをとって、mangoをそのlistに足して返します。change_from_apple_to_bananaは、同じようにlistをとってappleを探して、bananaに入れ替えて返します。 その

                                                                        Pythonを使って関数型プログラミング Part.2
                                                                      • Semgrep — Find bugs and enforce code standards

                                                                        Semgrep CodeDeploy, manage, and monitor Semgrep at scale (SAST).

                                                                          Semgrep — Find bugs and enforce code standards
                                                                        • JavascriptのObjectリテラルとJSON.parseについて - abcdefGets

                                                                          V8のJSON.parseについて 最近(ちょっと前か)話題のオブジェクトリテラルよりもJSON.parseのほうが早い件について。 その理由を内部実装の観点から書く。 また注意点を最後に書いた。 話題のブログは以下から https://v8.dev/blog/cost-of-javascript-2019 パースについて V8はjavascriptコードをパースするにあたって、Lazy Parseを行っている。 Lazy Parse javascriptはブラウザという特殊な環境で実行される言語であるため、パースにも少々工夫が必要になる。 基本的にV8はすべてのソースコードをパースしない。 一旦グローバルスコープにあるものだけをちゃんとパースして、それ以外はPreParserというパーサで関数だけをかき集める。 function foo() { } function bar() { fu

                                                                            JavascriptのObjectリテラルとJSON.parseについて - abcdefGets
                                                                          • 【脱ランタイムCSS in JS】styled-componentsを別のCSS in JSに自動置換するCLIツールの開発

                                                                            1.はじめに 本記事はサイボウズの夏インターン(2022年)で取り組んだ内容の紹介を行います。インターンでは、サイボウズのフロントエンド領域における横断的組織であるフロントエンドエキスパートチームに配属されました。5日間のインターン期間でstyled-componentsを別のCSS in JSに自動置換するCLIツール・extract-styledの開発に取り組みました。 2. extract-styledの紹介 実装したextract-styledは、以下のようなCLI経由の実行を通して、styled-componentsで定義されたReactコンポーネントをtargetに指定した任意のCSS in JSに変換することができます。(現時点では変換先としてlinaria・vanilla-extractに対応) $ extract-styled \\ --path ./src/compon

                                                                              【脱ランタイムCSS in JS】styled-componentsを別のCSS in JSに自動置換するCLIツールの開発
                                                                            • JavaScript ASTを使ったツール(自作、ESLint、Babel、jscodeshift)を実装する話

                                                                              JavaScript ASTを使ったツール(自作、ESLint、Babel、jscodeshift)を実装する話 Dive into ASTというJavaScriptのASTを使ったツールの作り方を見ていく話を書きました。 自作の正規表現、ASTチェックツール、ESLint、Babel、jscodeshiftでそれぞれ動くツールを実装してるので、リポジトリにまとめてあります。 スライドではCode Surferを使ってASTや書き方をインタラクティブに解説しています。 スライド: Dive into AST リポジトリ: azu/dive-into-ast: JavaScriptを中心にしたAST(Abstract Syntax Tree)を使ったツールの作り方についての資料です! 自作ASTツール、ESLint、Babel、jscodeshift それぞれでASTを使ったツールをどう実装

                                                                                JavaScript ASTを使ったツール(自作、ESLint、Babel、jscodeshift)を実装する話
                                                                              • GitHub - unjs/magicast: 🧀 Programmatically modify JavaScript and TypeScript source codes with a simplified, elegant and familiar syntax powered by recast and babel.

                                                                                Programmatically modify JavaScript and TypeScript source codes with a simplified, elegant and familiar syntax. Built on top of the AST parsed by recast and babel. ❯ 🧙🏼 Magical modify a JS/TS file and write back magically just like JSON! ❯ 🔀 Exports/Import manipulate module's imports and exports at ease ❯ 💼 Function Arguments easily manipulate arguments passed to a function call, like defineCon

                                                                                  GitHub - unjs/magicast: 🧀 Programmatically modify JavaScript and TypeScript source codes with a simplified, elegant and familiar syntax powered by recast and babel.
                                                                                • Reconstructing TypeScript, part 0: intro and background

                                                                                  Jake Donham > Technical Difficulties > Reconstructing TypeScript, part 0 Reconstructing TypeScript, part 0: intro and background2021-09-07I've been building a "document development environment" called Programmable Matter that supports live code embedded in documents, with a simple TypeScript-like programming language. It's been fun figuring out how to implement it—the type system in TypeScript is

                                                                                  新着記事