rescript-lang / rescript-lang/experimental-rescript-webapi
Rename overloaded constructor bindings from numbered make* names to semantic from* names
まだ誰も着手していません。
- 主要言語
- ReScript
- スター
- 40
- フォーク
- 11
- 平均マージ
- 3日 12時間
- マージ済み PR(30日)
- 12
説明
Summary
Rename overloaded constructor bindings from numbered make* names to semantic from* names, while keeping singleton and true default constructors named make. This pass should also update constructor source comments so generated API docs describe each overload's input shape, add compile-coverage tests for every renamed constructor, and update contributor docs with the constructor naming and documentation rules.
Plan source: docs/superpowers/plans/2026-04-18-constructor-make-rename-plan.md
Context from PR #234
PR #234 (Rename a few bindings with a proper descriptive naming) is the prior rename pass for this area. It was authored against the pre-*API module layout, so treat paths like src/DOM/* and src/WebSockets/* in that PR as earlier equivalents of the current src/DOMAPI/* and src/WebSocketsAPI/* files.
Use PR #234 as source material only for the overlapping constructor families in this issue:
FontFace:make2->fromDataView,make3->fromArrayBuffer, but the string constructor stayedmakeVideoFrame:make2throughmake10were renamed, but the HTML image constructor stayedmakeand several names were shorter than the source-type names this issue wants (fromSvgImage,fromVideoElement,fromCanvasElement)MediaStream:make2->fromStream,make3->fromTracksPath2D:make2->fromString, but the default constructor and copy constructor were not splitDOMMatrix/DOMMatrixReadOnly:make2->fromFloatArray, but the string overload stayed merged intomakeOfflineAudioContext:make2->makeWithParamsWebSocket:make2->makeWithProtocolsReadableStream:make2andmake3were removed instead of being remodeled as typed constructors
This issue intentionally supersedes the constructor naming choices from PR #234 where they do not match the make / from* rules:
- rename non-default constructors still called
make - prefer source-type names such as
fromMediaStream,fromURL,fromURLWithProtocols,fromHTMLVideoElement,fromString, andfromArray - split optional-argument constructors into a true
make()plus typedfrom*overloads - keep the non-constructor overload renames from PR #234 out of scope here
Rules to enforce
- Keep singleton constructors named
make. - Keep true default constructors named
make, even inside overloaded families. - Rename typed constructor overloads in overloaded families to
from*names based on the source input type. - Do not change existing
makeWith*constructors in this pass. - If an optional labeled argument currently hides the default constructor, split it into a real
makeplus typedfrom*overloads.
Scope
Rename pure overload families
-
src/CSSFontLoadingAPI/FontFace.resfromStringfromDataViewfromArrayBuffer
-
src/DOMAPI/VideoFrame.resfromHTMLImageElementfromSVGImageElementfromHTMLVideoElementfromHTMLCanvasElementfromImageBitmapfromOffscreenCanvasfromVideoFramefromArrayBufferfromSharedArrayBufferfromDataView
-
src/WebSocketsAPI/WebSocket.resfromURLfromURLWithProtocols
-
src/WebAudioAPI/OfflineAudioContext.resfromOptionsfromChannelCountLengthAndSampleRate
Update mixed default-plus-typed families
-
src/MediaCaptureAndStreamsAPI/MediaStream.res- keep
make()as the default constructor - rename typed overloads to
fromMediaStreamandfromTracks
- keep
-
src/FileAPI.res- add
type underlyingSource<'t> = anynear the existing stream support types
- add
-
src/FileAPI/ReadableStream.res- make
makegeneric:unit => readableStream<'t> - rename typed overloads to
fromUnderlyingSourceandfromUnderlyingSourceWithStrategy
- make
Split constructor bindings that currently hide the default constructor
-
src/CanvasAPI/Path2D.res- split into
make(),fromPath2D(~path),fromString(~path)
- split into
-
src/DOMAPI/DOMMatrix.res- split into
make(),fromString(~init),fromArray(~init)
- split into
-
src/DOMAPI/DOMMatrixReadOnly.res- split into
make(),fromString(~init),fromArray(~init)
- split into
Documentation
- Rewrite every touched constructor comment to use the final function name in the signature line and example.
- Add a
Source shape:block for every touched constructor comment. - Include MDN links for the input type.
- Include ReScript stdlib links when the source input is a stdlib type such as
string,array<'a>,ArrayBuffer.t, orDataView.t. - Include local source links when the shape is a project-local record or alias.
- Preserve the existing constructor-level MDN link in each comment.
- Update
docs/content/docs/contributing/api-modelling.mdxwith a constructor-overload subsection coveringmakevsfrom*naming and overload splitting. - Update
docs/content/docs/contributing/documentation.mdxso the documented comment structure explicitly includes source-shape links and shows a constructor overload example. - Do not hand-edit
docs/pages/apidocs/**; those pages are template-driven from source comments.
Tests and generated artifacts
- Add compile-coverage test modules for:
tests/CSSFontLoadingAPI/FontFace__test.restests/DOMAPI/VideoFrame__test.restests/WebSocketsAPI/WebSocket__test.restests/WebAudioAPI/OfflineAudioContext__test.restests/MediaCaptureAndStreamsAPI/MediaStream__test.restests/FileAPI/ReadableStream__test.restests/CanvasAPI/Path2D__test.restests/DOMAPI/DOMMatrix__test.restests/DOMAPI/DOMMatrixReadOnly__test.res
- Commit the generated
tests/**/*.jssnapshots for those new coverage modules. - Do not hand-edit
lib/**; it should be regenerated through the normal build.
Verification
-
npm run build -
npm run test -
npm run build:docs -
npm run format:check
Expected results:
- build succeeds with the renamed constructors and overload splits
- tests succeed with the new committed
.jssnapshots and no leftover snapshot diffs - docs build succeeds with the updated source comments and contributor docs
- format check succeeds after formatting
Out of scope
- adopting Vitest in this pass
- adopting happy-dom in this pass
- replacing the current compile-and-snapshot test flow
- runtime browser-behavior assertions
- updating contributor testing docs for a future runtime harness before that harness exists
Rollout order
- Update
ReadableStreamsupport types insrc/FileAPI.resfirst. - Rename the pure overload families.
- Update the mixed default-plus-typed families.
- Split the optional-argument constructor bindings into true default
makeplus typedfrom*overloads. - Rewrite all touched constructor comments.
- Add compile-coverage tests and generated JS snapshots.
- Update contributor docs.
- Leave a clear note that runtime verification will be handled later via Vitest and happy-dom.
- Run build, test, docs, and format verification.
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
docs/superpowers/plans/2026-04-18-constructor-make-rename-plan.md とロールアウト順序から始め、まず src/FileAPI.res と src/FileAPI/ReadableStream.res に取り組んでください。指定された constructor のソースファイルを順に確認し、対応する compile-coverage モジュールを tests/ 配下に追加してください。コミット済みの JavaScript スナップショットも含めます。npm run build、npm run test、npm run build:docs、npm run format:check が、生成アーティファクトの差分なしで成功すれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 領域
- api, documentation, testing
- issue の種類
- リファクタリング
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 静か
- 明瞭さ
- 明確に書かれている
- 初心者へのやさしさ
- 35/100