permission sets in deno.json

まだDraft状態ですが、deno.jsonでパーミッションを管理する機能を追加するPRが作成されています:

このPRではdeno.jsonpermissionSetsという項目が追加されており、複数のパーミッションセットを定義できるようです:

{
  "permissionSets": {
    "default": {
      "read": ["data"],
      "net": ["http://localhost:3000/api"]
    },
    "build": {
      "read": ["data"],
      "write": ["dist"]    
    }
  }
}

Denoを実行する際に--permission-setオプションを指定することで、deno.jsonで定義されたパーミッションセットを適用する想定のようです:

# デフォルトでは`default`という名前がついたパーミッションセットが適用されるようです
$ deno run --permission-set main.ts

# buildという名前がついたパーミッションセットを有効化します
$ deno run --permission-set=build scripts/build.ts

deno lint - JavaScriptプラグインでのセレクターのサポートについて

deno lintのJavaScriptプラグインにセレクターの仕組みを実装するPRがマージされています:

サポートされている構文については上記のPRに詳しく記載されていますが、以下のように柔軟にノードの問い合わせを行うことができるようです:

const plugin = {
  name: "sample-plugin",
  rules: {
    foo: {
      create: () => {
        const visitor = {
          // (1) if文の子孫の関数呼び出しにマッチします
          "IfStatement CallExpression": (node) => {
            assert(node.type === "CallExpression");
          },
          // (2) async関数にマッチします
          "FunctionDeclaration[async=true]": (node) => {
            assert(node.type === "FunctionDeclaration");
            assert(node.async);
          },
        };
        return visitor;
      },
    },
  },
};

export default plugin;