Skip to content

scratch-vm の lint 警告を解消する #21

@takaokouji

Description

@takaokouji

概要

scratch-vm の lint 実行時に 11 件の警告が発生しています。これらを解消します。

$ docker compose run --rm gui bash -c "cd /app/gui/scratch-vm && npm run lint"

警告内容

ファイル 警告
src/engine/runtime.js 866, 917, 1017, 1026, 1268, 1369, 1452 format-message/literal-pattern
src/extension-support/extension-manager.js 371, 375 format-message/literal-pattern
src/util/maybe-format-message.js 13 format-message/literal-pattern, format-message/literal-locale

原因

format-message ライブラリの ESLint ルールは、パターン(メッセージID)とロケールがリテラル文字列であることを期待しています。これにより静的解析やメッセージの抽出が可能になります。

しかし、maybeFormatMessage 関数は動的なメッセージオブジェクトを処理するために設計されており、変数を formatMessage に渡しています:

// src/util/maybe-format-message.js
const maybeFormatMessage = function (maybeMessage, args, locale) {
    if (maybeMessage && maybeMessage.id && maybeMessage.default) {
        return formatMessage(maybeMessage, args, locale);  // 警告発生
    }
    return maybeMessage;
};

解決案

このケースでは、ESLint のインラインコメントで警告を抑制するのが適切です。

理由

  • maybeFormatMessage は拡張機能から渡される動的なメッセージオブジェクトを処理するために設計されている
  • 拡張機能のメッセージはコンパイル時には不明
  • これは意図的な設計であり、静的解析の制限

修正内容

1. src/util/maybe-format-message.js (13行目)

const maybeFormatMessage = function (maybeMessage, args, locale) {
    if (maybeMessage && maybeMessage.id && maybeMessage.default) {
        // eslint-disable-next-line format-message/literal-pattern, format-message/literal-locale
        return formatMessage(maybeMessage, args, locale);
    }
    return maybeMessage;
};

2. src/engine/runtime.js (7箇所)

maybeFormatMessage を呼び出す各箇所に以下のコメントを追加:

// eslint-disable-next-line format-message/literal-pattern

対象行: 866, 917, 1017, 1026, 1268, 1369, 1452

3. src/extension-support/extension-manager.js (2箇所)

maybeFormatMessage を呼び出す各箇所に以下のコメントを追加:

// eslint-disable-next-line format-message/literal-pattern

対象行: 371, 375

完了条件

  • npm run lint で警告が 0 件になること

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions