Utilizing Records and Tuples for Immutable Data Structures in JavaScript
Introduction to using Records and Tuples in JavaScript to create immutable data structures, reducing errors from unintended mutations.
0 likes
5 views
Rule Content
{ "title": "Utilizing Records and Tuples for Immutable Data Structures in JavaScript", "description": "Enforce the use of Records and Tuples to create deeply immutable data structures, preventing unintended mutations and enhancing code reliability.", "category": "JavaScript Cursor Rules", "rules": [ { "id": "prefer-records-tuples", "description": "Prefer using Records (#{}) and Tuples (#[]) over Objects ({}) and Arrays ([]) for immutable data structures.", "severity": "warning", "pattern": [ { "type": "ObjectExpression", "guard": "isImmutableObject" }, { "type": "ArrayExpression", "guard": "isImmutableArray" } ], "message": "Consider using a Record (#{}) or Tuple (#[]) for immutable data structures to prevent unintended mutations." }, { "id": "no-mutable-values-in-records-tuples", "description": "Ensure that Records and Tuples contain only primitive values or other Records and Tuples.", "severity": "error", "pattern": [ { "type": "RecordExpression", "guard": "containsMutableValues" }, { "type": "TupleExpression", "guard": "containsMutableValues" } ], "message": "Records and Tuples must only contain primitive values or other Records and Tuples." }, { "id": "no-mutation-of-records-tuples", "description": "Disallow any attempts to mutate Records and Tuples after their creation.", "severity": "error", "pattern": [ { "type": "AssignmentExpression", "left": { "type": "MemberExpression", "object": { "type": "RecordExpression" } } }, { "type": "AssignmentExpression", "left": { "type": "MemberExpression", "object": { "type": "TupleExpression" } } } ], "message": "Records and Tuples are immutable; modifying their properties or elements is not allowed." } ], "functions": { "isImmutableObject": "function(node) { /* logic to determine if object is intended to be immutable */ }", "isImmutableArray": "function(node) { /* logic to determine if array is intended to be immutable */ }", "containsMutableValues": "function(node) { /* logic to check if node contains mutable values */ }" } }