Skip to content

Conversation

@MinCrohn
Copy link
Collaborator

No description provided.

@gemini-code-assist
Copy link

Summary of Changes

Hello @MinCrohn, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces enhancements to the state management system by providing State instances with more self-awareness through a unique key and dynamic args upon activation. These changes improve the flexibility and contextual information available to states, alongside minor fixes for display object lifecycle management and event emission.

Highlights

  • State Class Enhancement: The base State class now accepts a name parameter in its constructor, which is stored as this.key. Additionally, its enter method now captures and stores all passed arguments in this.args, providing more context to state instances.
  • StateManager Update: The StateManager has been updated to pass the state's name to the StateClass constructor when creating new state instances, aligning with the State class enhancements.
  • SelectionState Refinements: The SelectionState's enter method now uses rest parameters for greater flexibility, and its exit method includes a more robust check to ensure the _selectionBox has a parent before attempting to remove it.
  • Object Transformation Event: A new object_transformed event is now emitted on the viewport when a Cellsable object is destroyed, allowing external systems to react to these lifecycle changes.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces key and args properties to the base State class, allowing states to be identified by name and to receive arguments upon entry. The changes in StateManager and State correctly implement this. However, the adaptation in SelectionState has introduced some issues. The enter method has become less readable, and more critically, the change in the exit method introduces a memory leak for non-singleton states. I've also noted a small, unrelated change in Cellsable.js. My review includes suggestions to improve readability and fix the memory leak.

Comment on lines +107 to +109
if (this._selectionBox.parent) {
this._selectionBox.parent.removeChild(this._selectionBox);
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

Changing this._selectionBox?.destroy() to removeChild() introduces a memory leak for non-singleton states. When a non-singleton state instance is popped and discarded, the associated Graphics object for _selectionBox is never destroyed, and its WebGL resources are leaked. While not destroying is correct for reusable singleton states, the exit method needs to handle both cases.

A robust solution would involve a separate destroy lifecycle method. Given the current structure, a safer approach is to destroy _selectionBox here, and recreate it in enter() if it's been destroyed. This prevents leaks, though it has a minor performance cost for singletons.

    this._selectionBox?.destroy();

@MinCrohn MinCrohn merged commit e902f8f into main Dec 23, 2025
@MinCrohn MinCrohn deleted the chore/fix branch December 23, 2025 02:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants