-
Notifications
You must be signed in to change notification settings - Fork 0
Fix/remove links legacybehavior #11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
…ut legacyBehavior - Button.tsx: Only pass ref to button element, not to Link (Link manages its own anchor) - Dropdown.tsx: Strip ref from props when using Link to avoid type incompatibility This fixes the type errors that were causing API V1 and V2 builds to fail. Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com>
Link component doesn't accept disabled or type props, so these should only be passed when rendering a button element. Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com>
The passThroughProps spread was including a ref property that's incompatible with Link's expected ref type. This strips the ref when rendering a Link component. Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com>
… types The Button component uses a union type for props that can be either Link or button props. TypeScript can't narrow the union type properly when using React.createElement with a dynamic element type, so we use a type assertion to cast the props to the correct type. Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com>
Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com>
Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com>
….devin.ai/proxy/github.com/calcom/cal.com into fix/remove-links-legacybehavior
|
CodeAnt AI is reviewing your PR. Thanks for using CodeAnt! 🎉We're free for open-source projects. if you're enjoying it, help us grow by sharing. Share on X · |
Summary of ChangesHello @visz11, 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 modernizes the application's navigation by updating all instances of Highlights
🧠 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 AssistThe 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
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 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
|
WalkthroughThis pull request modernizes Next.js Link component usage across the codebase by removing legacy patterns and refactoring the Button component. The Button component in the UI package is refactored from a dynamic element creation approach to explicit JSX branching that handles Link and button paths separately. Multiple files—including Setup, forgot-password-single-view, bookings-single-view, and UI components—are updated to replace Link wrapped around buttons with direct Link components or Button components with href props. Legacy Link props such as Pre-merge checks and finishing touches❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (1 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Refacto PR SummaryMigrated Next.js Link components from legacy behavior to modern App Router pattern by removing Key Changes:
Change HighlightsClick to expand
Sequence DiagramsequenceDiagram
participant U as User
participant C as Component
participant L as Link Component
participant R as Router
U->>C: Click navigation element
C->>L: Render with href + className
L->>L: Create anchor element directly
L->>R: Navigate to route
R-->>U: Page transition
Note over C,L: Legacy: Link wraps <a> child
Note over C,L: Modern: Link renders <a> directly
Testing GuideClick to expand
|
|
Refacto is reviewing this PR. Please wait for the review comments to be posted. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
packages/ui/components/list/List.tsx (1)
100-106: Consider removingpassHreffor consistency.While
ListItemwas updated to remove legacy Link props,ListLinkItemstill usespassHref(line 101). For consistency across the codebase and to complete the modernization effort, consider removingpassHrefhere as well.🔎 Suggested fix
<Link - passHref href={href} className={classNames(packages/ui/components/form/step/Stepper.tsx (1)
71-71: Consider using named export.As per coding guidelines, prefer named exports over default exports for better tree-shaking and refactoring. The Stepper component would benefit from being a named export.
🔎 Suggested change
-export default Stepper; +export { Stepper };Note: This would require updating import statements in consuming files.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (8)
apps/web/components/apps/make/Setup.tsxapps/web/modules/auth/forgot-password/[id]/forgot-password-single-view.tsxapps/web/modules/bookings/views/bookings-single-view.tsxpackages/app-store/_components/AppNotInstalledMessage.tsxpackages/ui/components/button/Button.tsxpackages/ui/components/dropdown/Dropdown.tsxpackages/ui/components/form/step/Stepper.tsxpackages/ui/components/list/List.tsx
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,js,jsx}
⚙️ CodeRabbit configuration file
Flag default exports and encourage named exports. Named exports provide better tree-shaking, easier refactoring, and clearer imports. Exempt main components like pages, layouts, and components that serve as the primary export of a module.
Files:
apps/web/modules/auth/forgot-password/[id]/forgot-password-single-view.tsxpackages/ui/components/form/step/Stepper.tsxapps/web/modules/bookings/views/bookings-single-view.tsxapps/web/components/apps/make/Setup.tsxpackages/app-store/_components/AppNotInstalledMessage.tsxpackages/ui/components/dropdown/Dropdown.tsxpackages/ui/components/button/Button.tsxpackages/ui/components/list/List.tsx
🧬 Code graph analysis (2)
apps/web/components/apps/make/Setup.tsx (1)
packages/ui/components/button/Button.tsx (1)
Button(221-361)
packages/app-store/_components/AppNotInstalledMessage.tsx (1)
packages/ui/components/button/Button.tsx (1)
Button(221-361)
🔇 Additional comments (13)
packages/ui/components/list/List.tsx (1)
59-62: LGTM! Link modernization is correct.The removal of
passHrefandlegacyBehavioraligns with Next.js 15 best practices where Link components no longer require these legacy props.packages/ui/components/form/step/Stepper.tsx (1)
29-61: LGTM! Link modernization is correct.The replacement of anchor-wrapped Links with direct Link components carrying className is appropriate for Next.js 15. Accessibility is properly maintained with
sr-onlylabels, and navigation props (shallow,replace) are correctly applied.apps/web/modules/auth/forgot-password/[id]/forgot-password-single-view.tsx (1)
48-52: LGTM! Semantically improved navigation.The replacement of a Link-wrapped button with a styled Link component is correct for Next.js 15 and semantically more appropriate since this is a navigation action rather than a form submission or state change.
apps/web/modules/bookings/views/bookings-single-view.tsx (2)
809-816: LGTM! Link modernization is correct.The replacement of the nested span-wrapped Link with a direct Link component carrying className and data-testid is appropriate for Next.js 15. This simplifies the DOM structure while maintaining functionality and testability.
839-848: LGTM! Link modernization is correct.The replacement of the span-wrapped Link with a direct Link component is appropriate for Next.js 15. The styling and test attributes are correctly applied directly to the Link component.
packages/ui/components/dropdown/Dropdown.tsx (1)
144-154: LGTM! Correct ref handling for Link.The refactoring to explicitly strip the ref when rendering a Link is correct, as Next.js Link manages its own anchor element. The explicit branching between Link and button paths is cleaner and more type-safe than dynamic element creation.
packages/app-store/_components/AppNotInstalledMessage.tsx (1)
18-21: LGTM! Consistent with Button refactor.The migration from Link-wrapped navigation to Button with href is correct and consistent with the broader Button component refactor that supports href-based navigation. This provides a more consistent API surface for navigation actions.
apps/web/components/apps/make/Setup.tsx (2)
73-75: Verify the need for raw img element.The eslint-disable comment suppresses the Next.js recommendation to use
next/imageinstead of<img>. Consider whether this image could benefit from Next.js image optimization (automatic format conversion, lazy loading, responsive sizing).If the image is from
/api/app-store/make/icon.svgand requires dynamic loading or specific handling thatnext/imagedoesn't support well, this is acceptable. Otherwise, consider usingnext/imagefor better performance.
137-139: LGTM! Consistent with Button refactor.The migration to Button with href for navigation is correct and consistent with the broader Button component refactor that now supports href-based navigation.
packages/ui/components/button/Button.tsx (4)
242-250: LGTM! Well-structured preparation logic.The computed values for disabled state, link detection, className, and click handling are well-organized and clearly separate concerns. The explicit
|| falseon line 242, while technically redundant, improves code clarity.
252-327: LGTM! Effective content extraction.Extracting the button content into a reusable block reduces code duplication between the Link and Button rendering paths. The loading indicator and icon positioning logic is correctly shared.
329-341: Verify tooltip support for Link-based buttons.The Link rendering path doesn't wrap the Link in the
Wrappercomponent, which means buttons withhrefprops won't display tooltips. This differs from regular buttons (lines 343-360) that are wrapped and support tooltips.Confirm whether this is intentional. If Link-based buttons should support tooltips, consider wrapping the Link in the Wrapper component similarly to the button path.
💡 Potential fix if tooltips should be supported
if (isLink) { return ( + <Wrapper + data-testid="wrapper" + tooltip={props.tooltip} + tooltipSide={tooltipSide} + tooltipOffset={tooltipOffset} + tooltipClassName={tooltipClassName}> <Link {...(passThroughProps as Omit<JSX.IntrinsicElements["a"], "href" | "onClick" | "ref"> & LinkProps)} shallow={shallow && shallow} className={buttonClassName} onClick={handleClick}> {buttonContent} </Link> + </Wrapper> ); }
343-360: LGTM! Correct button rendering with ref forwarding.The button rendering path correctly forwards the ref to the underlying button element and wraps it with the Wrapper for tooltip support. Type casting is appropriately used to handle the union type.
Code Review: Link Migration & Component ImprovementsPR Confidence Score: 🟨 4 / 5👍 Well Done
📁 Selected files for review (8)
🎯 Custom Instructions
📝 Additional Comments
🧰 Additional context used
|
| <img className="h-11" src="/api/app-store/make/icon.svg" alt="Make Logo" /> | ||
| </div> | ||
| <div className="ml-2 ltr:mr-2 rtl:ml-2 md:ml-5"> | ||
| <div className="ml-2 md:ml-5 ltr:mr-2 rtl:ml-2"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CSS Class Ordering
CSS class ordering places responsive modifier 'md:ml-5' between base 'ml-2' and directional classes 'ltr:mr-2 rtl:ml-2'. This creates potential cascade conflicts where directional classes may override responsive spacing. Consistent ordering should group base, responsive, then directional modifiers.
Standards
- CSS-Cascade-Logic
- Responsive-Design-Consistency
| const handleClick = disabled | ||
| ? (e: React.MouseEvent<HTMLElement, MouseEvent>) => { | ||
| e.preventDefault(); | ||
| } | ||
| : props.onClick; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing Error Handling
Button component passes through onClick handler without error boundary protection. Navigation failures or handler exceptions can propagate uncaught causing component crashes. User interactions become unreliable when handler throws unexpected errors.
Standards
- ISO-IEC-25010-Reliability-Fault-Tolerance
- ISO-IEC-25010-Functional-Correctness-Appropriateness
Context References
packages/ui/components/button/Button.tsx-Button component handles both link and button elements - no error handling wrapper
| `/booking/${bookingInfo?.uid}` | ||
| )}`} | ||
| className="underline" | ||
| data-testid="reschedule-link"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Suggestion: The login link for users who must log in before updating a booking is tagged with the reschedule-link test id, which can cause automated tests or tooling that target the reschedule action to mistakenly interact with this login link instead, leading to incorrect flows being exercised in scenarios where login is required to update a booking. [possible bug]
Severity Level: Critical 🚨
| data-testid="reschedule-link"> | |
| data-testid="login-link"> |
Why it matters? ⭐
The current code places data-testid="reschedule-link" on a login link used when requiresLoginToUpdate is true.
That re-uses a test id that's also used for the actual reschedule action elsewhere and can cause automated tests or tooling to
target the wrong element. Renaming the test id to something specific to the login action (e.g. "login-link") fixes an actual
test/selector collision rather than being a purely cosmetic change.
Prompt for AI Agent 🤖
This is a comment left during a code review.
**Path:** apps/web/modules/bookings/views/bookings-single-view.tsx
**Line:** 814:814
**Comment:**
*Possible Bug: The login link for users who must log in before updating a booking is tagged with the `reschedule-link` test id, which can cause automated tests or tooling that target the reschedule action to mistakenly interact with this login link instead, leading to incorrect flows being exercised in scenarios where login is required to update a booking.
Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.| <Link | ||
| href={`/reschedule/${seatReferenceUid || bookingInfo?.uid}${ | ||
| currentUserEmail | ||
| ? `?rescheduledBy=${encodeURIComponent(currentUserEmail)}` | ||
| : "" | ||
| }`} | ||
| className="underline" | ||
| data-testid="reschedule-link"> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Suggestion: The reschedule link now has the data-testid="reschedule-link" on the <Link> element instead of the wrapping <span>, which breaks existing selectors like span[data-testid="reschedule-link"] > a used in e2e tests (e.g. booking-limits.e2e.ts) and prevents those tests from finding the reschedule URL, so moving the test id back to the span restores the DOM contract without changing user-facing behavior. [possible bug]
Severity Level: Critical 🚨
| <Link | |
| href={`/reschedule/${seatReferenceUid || bookingInfo?.uid}${ | |
| currentUserEmail | |
| ? `?rescheduledBy=${encodeURIComponent(currentUserEmail)}` | |
| : "" | |
| }`} | |
| className="underline" | |
| data-testid="reschedule-link"> | |
| <span className="text-default inline" data-testid="reschedule-link"> | |
| <Link | |
| href={`/reschedule/${seatReferenceUid || bookingInfo?.uid}${ | |
| currentUserEmail | |
| ? `?rescheduledBy=${encodeURIComponent(currentUserEmail)}` | |
| : "" | |
| }`} | |
| className="underline"> |
Why it matters? ⭐
The change in the PR moved data-testid="reschedule-link" from the wrapping span to the Link element. If existing e2e or DOM-based tests expect the test id on the wrapper span (selectors like span[data-testid="reschedule-link"] > a), the PR will break those tests.
Moving the test id back to the span preserves the prior DOM contract without affecting user-facing behavior, so this is a practical, low-risk fix to maintain test stability.
Prompt for AI Agent 🤖
This is a comment left during a code review.
**Path:** apps/web/modules/bookings/views/bookings-single-view.tsx
**Line:** 839:846
**Comment:**
*Possible Bug: The reschedule link now has the `data-testid="reschedule-link"` on the `<Link>` element instead of the wrapping `<span>`, which breaks existing selectors like `span[data-testid="reschedule-link"] > a` used in e2e tests (e.g. `booking-limits.e2e.ts`) and prevents those tests from finding the reschedule URL, so moving the test id back to the span restores the DOM contract without changing user-facing behavior.
Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.| <p className="text-sm font-medium">{stepLabel(props.step, steps.length)}</p> | ||
| <ol role="list" className="ml-8 flex items-center space-x-5" ref={stepperRef}> | ||
| {steps.map((mapStep, index) => ( | ||
| <li key={mapStep.title}> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Suggestion: Using mapStep.title alone as the React key for each step assumes titles are globally unique; if two steps share the same title, React's reconciliation can mis-associate DOM nodes and lead to incorrect UI updates when steps change, so the key should be made unique (for example by incorporating the index). [possible bug]
Severity Level: Critical 🚨
| <li key={mapStep.title}> | |
| <li key={`${mapStep.title}-${index}`}> |
Why it matters? ⭐
Using only mapStep.title as the key can lead to duplicated keys if two steps share a title, which breaks React reconciliation and can cause UI bugs.
Appending the index (or, better, using a stable unique id on the step) makes the key unique and prevents accidental DOM reuse. This is a practical fix for a real potential bug.
Prompt for AI Agent 🤖
This is a comment left during a code review.
**Path:** packages/ui/components/form/step/Stepper.tsx
**Line:** 28:28
**Comment:**
*Possible Bug: Using `mapStep.title` alone as the React `key` for each step assumes titles are globally unique; if two steps share the same title, React's reconciliation can mis-associate DOM nodes and lead to incorrect UI updates when steps change, so the key should be made unique (for example by incorporating the index).
Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.| href={props.disableSteps ? "#" : `${href}?step=${index + 1}`} | ||
| shallow | ||
| replace | ||
| className="hover:bg-inverted block h-2.5 w-2.5 rounded-full bg-gray-600"> | ||
| <span className="sr-only">{mapStep.title}</span> | ||
| </Link> | ||
| ) : index + 1 === props.step ? ( | ||
| <Link | ||
| href={props.disableSteps ? "#" : `${href}?step=${index + 1}`} | ||
| shallow | ||
| replace | ||
| className="relative flex items-center justify-center" | ||
| aria-current="step"> | ||
| <span className="absolute flex h-5 w-5 p-px" aria-hidden="true"> | ||
| <span className="bg-emphasis h-full w-full rounded-full" /> | ||
| </span> | ||
| <span | ||
| className="relative block h-2.5 w-2.5 rounded-full bg-gray-600" | ||
| aria-hidden="true" | ||
| /> | ||
| <span className="sr-only">{mapStep.title}</span> | ||
| </Link> | ||
| ) : ( | ||
| <Link | ||
| href={props.disableSteps ? "#" : `${href}?step=${index + 1}`} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Suggestion: Building the step URLs by blindly appending ?step=${index + 1} to the href string will break when the base href already contains query parameters (e.g. /auth/setup?mode=admin), resulting in invalid URLs like /auth/setup?mode=admin?step=2 and incorrect routing behavior; you should append step with & when a ? already exists. [logic error]
Severity Level: Minor
| href={props.disableSteps ? "#" : `${href}?step=${index + 1}`} | |
| shallow | |
| replace | |
| className="hover:bg-inverted block h-2.5 w-2.5 rounded-full bg-gray-600"> | |
| <span className="sr-only">{mapStep.title}</span> | |
| </Link> | |
| ) : index + 1 === props.step ? ( | |
| <Link | |
| href={props.disableSteps ? "#" : `${href}?step=${index + 1}`} | |
| shallow | |
| replace | |
| className="relative flex items-center justify-center" | |
| aria-current="step"> | |
| <span className="absolute flex h-5 w-5 p-px" aria-hidden="true"> | |
| <span className="bg-emphasis h-full w-full rounded-full" /> | |
| </span> | |
| <span | |
| className="relative block h-2.5 w-2.5 rounded-full bg-gray-600" | |
| aria-hidden="true" | |
| /> | |
| <span className="sr-only">{mapStep.title}</span> | |
| </Link> | |
| ) : ( | |
| <Link | |
| href={props.disableSteps ? "#" : `${href}?step=${index + 1}`} | |
| href={ | |
| props.disableSteps | |
| ? "#" | |
| : `${href}${href.includes("?") ? "&" : "?"}step=${index + 1}` | |
| } | |
| shallow | |
| replace | |
| className="hover:bg-inverted block h-2.5 w-2.5 rounded-full bg-gray-600"> | |
| <span className="sr-only">{mapStep.title}</span> | |
| </Link> | |
| ) : index + 1 === props.step ? ( | |
| <Link | |
| href={ | |
| props.disableSteps | |
| ? "#" | |
| : `${href}${href.includes("?") ? "&" : "?"}step=${index + 1}` | |
| } | |
| shallow | |
| replace | |
| className="relative flex items-center justify-center" | |
| aria-current="step"> | |
| <span className="absolute flex h-5 w-5 p-px" aria-hidden="true"> | |
| <span className="bg-emphasis h-full w-full rounded-full" /> | |
| </span> | |
| <span | |
| className="relative block h-2.5 w-2.5 rounded-full bg-gray-600" | |
| aria-hidden="true" | |
| /> | |
| <span className="sr-only">{mapStep.title}</span> | |
| </Link> | |
| ) : ( | |
| <Link | |
| href={ | |
| props.disableSteps | |
| ? "#" | |
| : `${href}${href.includes("?") ? "&" : "?"}step=${index + 1}` | |
| } |
Why it matters? ⭐
The claim is correct: blindly appending ?step=... will create malformed URLs when href already has query params.
This leads to incorrect links and potential routing issues. The improvement (conditionally using & when href contains ?) fixes a real logic bug.
Preferably this should use a proper URL/query builder (URL or next/link's object form) to avoid edge cases, but the suggested patch is a valid, minimal fix for the reported problem.
Prompt for AI Agent 🤖
This is a comment left during a code review.
**Path:** packages/ui/components/form/step/Stepper.tsx
**Line:** 31:55
**Comment:**
*Logic Error: Building the step URLs by blindly appending `?step=${index + 1}` to the `href` string will break when the base `href` already contains query parameters (e.g. `/auth/setup?mode=admin`), resulting in invalid URLs like `/auth/setup?mode=admin?step=2` and incorrect routing behavior; you should append `step` with `&` when a `?` already exists.
Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.|
CodeAnt AI finished reviewing your PR. |
💡 Enhance Your PR ReviewsWe noticed that 3 feature(s) are not configured for this repository. Enabling these features can help improve your code quality and workflow: 🚦 Quality GatesStatus: Quality Gates are not enabled at the organization level 🎫 Jira Ticket ComplianceStatus: Jira credentials file not found. Please configure Jira integration in your settings ⚙️ Custom RulesStatus: No custom rules configured. Add rules via organization settings or .codeant/review.json in your repository Want to enable these features? Contact your organization admin or check our documentation for setup instructions. |
There was a problem hiding this 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 focuses on updating the usage of next/link components across the codebase, primarily by removing the deprecated legacyBehavior and passHref props. The Button and ButtonOrLink components in the UI library have been refactored to internally handle the rendering of next/link when an href prop is provided, aligning with the modern Next.js API. This is a good modernization effort that simplifies link handling in various parts of the application.
| <div className="bg-default m-auto max-w-[43em] overflow-auto rounded pb-10 md:p-10"> | ||
| <div className="md:flex md:flex-row"> | ||
| <div className="invisible md:visible"> | ||
| {/* eslint-disable @next/next/no-img-element */} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CodeAnt-AI Description
Remove Next.js legacy link behavior and fix link/button rendering to stop type errors and preserve behavior
What Changed
Impact
✅ Fewer build failures during TypeScript compile✅ Clickable links keep expected styling and accessibility✅ Disabled/loading buttons prevent accidental clicks💡 Usage Guide
Checking Your Pull Request
Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.
Talking to CodeAnt AI
Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:
This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.
Example
Preserve Org Learnings with CodeAnt
You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:
This helps CodeAnt AI learn and adapt to your team's coding style and standards.
Example
Retrigger review
Ask CodeAnt AI to review the PR again, by typing:
Check Your Repository Health
To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.