-
Notifications
You must be signed in to change notification settings - Fork 32
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
PCH Smart Linking: Prevent duplicate Smart Links #2571
Conversation
WalkthroughThe changes mainly focus on preventing duplicate Smart Links in a given post or block by introducing additional filtering mechanisms. A new utility function Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant Component
participant Utils
participant API
User->>Component: Triggers Smart Link insertion
Component->>API: Fetch Smart Links data
API->>Component: Returns Smart Links data
Component->>Utils: Extract URLs using getAllSmartLinksURLs
Utils->>Component: Returns extracted URLs
Component->>Component: Filters out duplicates
Component->>User: Inserts unique Smart Links
Assessment against linked issues
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (invoked as PR comments)
Additionally, you can add CodeRabbit Configration File (
|
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: 1
Outside diff range and nitpick comments (4)
src/content-helper/editor-sidebar/smart-linking/utils.ts (4)
Line range hint
49-49
: Avoid assignments within expressions to enhance readability and reduce potential side effects.- while ( ( node = walker.nextNode() ) ) { + while ( walker.nextNode() ) { + node = walker.currentNode;
Line range hint
111-111
: Consider using optional chaining for better safety and readability.- while ( parentNode && ! ( parentNode instanceof HTMLAnchorElement ) ) { + while ( parentNode?.parentNode && ! ( parentNode instanceof HTMLAnchorElement ) ) {
Line range hint
168-168
: Avoid assignments within expressions to improve clarity and predictability.- while ( ( node = walker.nextNode() ) ) { + while ( walker.nextNode() ) { + node = walker.currentNode;
Line range hint
336-336
: Avoid assignments within expressions to maintain clear and predictable code behavior.- while ( ( match = regex.exec( node.textContent ) ) !== null ) { + while ( regex.exec( node.textContent ) !== null ) { + match = regex.lastMatch;
Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Files ignored due to path filters (2)
build/content-helper/editor-sidebar.asset.php
is excluded by!build/**
build/content-helper/editor-sidebar.js
is excluded by!build/**
Files selected for processing (2)
- src/content-helper/editor-sidebar/smart-linking/component.tsx (4 hunks)
- src/content-helper/editor-sidebar/smart-linking/utils.ts (1 hunks)
Additional context used
Path-based instructions (2)
src/content-helper/editor-sidebar/smart-linking/utils.ts (1)
Pattern
**/*.{js,ts,tsx,jsx}
: "Perform a detailed review of the provided code with following key aspects in mind:
- Review the code to ensure it is well-structured and adheres to best practices.
- Verify compliance with WordPress coding standards.
- Ensure the code is well-documented.
- Check for security vulnerabilities and confirm the code is secure.
- Optimize the code for performance, removing any unnecessary elements.
- Validate JSDoc comments for accuracy, currency, and adherence to WordPress coding standards.
- Ensure each line comment concludes with a period.
- Confirm every JSDoc comment includes a @SInCE tag indicating the next version of the plugin to include the code.
- Guarantee compatibility with the latest version of WordPress, avoiding deprecated functions or features."
src/content-helper/editor-sidebar/smart-linking/component.tsx (1)
Pattern
**/*.{js,ts,tsx,jsx}
: "Perform a detailed review of the provided code with following key aspects in mind:
- Review the code to ensure it is well-structured and adheres to best practices.
- Verify compliance with WordPress coding standards.
- Ensure the code is well-documented.
- Check for security vulnerabilities and confirm the code is secure.
- Optimize the code for performance, removing any unnecessary elements.
- Validate JSDoc comments for accuracy, currency, and adherence to WordPress coding standards.
- Ensure each line comment concludes with a period.
- Confirm every JSDoc comment includes a @SInCE tag indicating the next version of the plugin to include the code.
- Guarantee compatibility with the latest version of WordPress, avoiding deprecated functions or features."
Biome
src/content-helper/editor-sidebar/smart-linking/utils.ts
[error] 49-49: The assignment should not be in an expression. (lint/suspicious/noAssignInExpressions)
The use of assignments in expressions is confusing.
Expressions are often considered as side-effect free.
[error] 111-111: Change to an optional chain. (lint/complexity/useOptionalChain)
Unsafe fix: Change to an optional chain.
[error] 168-168: The assignment should not be in an expression. (lint/suspicious/noAssignInExpressions)
The use of assignments in expressions is confusing.
Expressions are often considered as side-effect free.
[error] 336-336: The assignment should not be in an expression. (lint/suspicious/noAssignInExpressions)
The use of assignments in expressions is confusing.
Expressions are often considered as side-effect free.
Additional comments not posted (1)
src/content-helper/editor-sidebar/smart-linking/utils.ts (1)
644-656
: The functiongetAllSmartLinksURLs
effectively extracts URLs from an array of smart links. This is a straightforward implementation and seems to meet the requirements specified in the PR objectives.
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: 2
Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Files selected for processing (1)
- src/content-helper/editor-sidebar/smart-linking/component.tsx (4 hunks)
Additional context used
Path-based instructions (1)
src/content-helper/editor-sidebar/smart-linking/component.tsx (1)
Pattern
**/*.{js,ts,tsx,jsx}
: "Perform a detailed review of the provided code with following key aspects in mind:
- Review the code to ensure it is well-structured and adheres to best practices.
- Verify compliance with WordPress coding standards.
- Ensure the code is well-documented.
- Check for security vulnerabilities and confirm the code is secure.
- Optimize the code for performance, removing any unnecessary elements.
- Validate JSDoc comments for accuracy, currency, and adherence to WordPress coding standards.
- Ensure each line comment concludes with a period.
- Confirm every JSDoc comment includes a @SInCE tag indicating the next version of the plugin to include the code.
- Guarantee compatibility with the latest version of WordPress, avoiding deprecated functions or features."
GitHub Check: build
src/content-helper/editor-sidebar/smart-linking/component.tsx
[failure] 29-29:
Trailing spaces not allowed
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
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
Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Files selected for processing (1)
- src/content-helper/editor-sidebar/smart-linking/component.tsx (4 hunks)
Files skipped from review as they are similar to previous changes (1)
- src/content-helper/editor-sidebar/smart-linking/component.tsx
Description
This PR addresses the concerns from #2476 and effectively prevents duplicated links from being suggested for a given post content.
In the context of this PR, a duplicated link is a link that shares the link text with any other link in a different position, or a link that shares a URL that's already present in the post content.
By leveraging the
url_exclusion_list
parameter of the API, we send all the existing smart links URLs with each request, so the LLM knows which posts should not be linked. On the other hand, the frontend also checks for duplicate URLs and link text, and effectively filter those out from the links suggestions before showing them to the user.Motivation and context
How has this been tested?
Tested locally
Summary by CodeRabbit
New Features
Bug Fixes