Skip to content
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

Warn against block.id usage #595

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open

Conversation

miazbikowski
Copy link
Contributor

@miazbikowski miazbikowski commented Nov 14, 2024

What are you adding in this PR?

Part of #463

We want to warn developers against the use of block.id in their liquid code in cases where the ID's instability could cause problems. This PR addresses usage in if, elseif, unless and case blocks. (I've got some comments in the code to demonstrate the cases)

Note: did not end up doing assign as a variable can have valid use cases (like those in my code comments)

Follow ups

Dev docs PR

What did you learn?

console.log will break your code and not tell you why. This is because of the language server.

Before you deploy

  • This PR includes a new checks or changes the configuration of a check
    • I included a minor bump changeset
    • It's in the allChecks array in src/checks/index.ts
    • I ran yarn build and committed the updated configuration files
      • If applicable, I've updated the theme-app-extension.yml config
  • I included a minor bump changeset
  • My feature is backward compatible
  • I included a patch bump changeset

@miazbikowski miazbikowski force-pushed the miaz/warn-block-id-usage branch 2 times, most recently from c60ac80 to 14f7744 Compare November 15, 2024 19:38
Comment on lines 27 to 52
return {
// BAD: {% if block.id == "123" %}
// BAD: {% if block.id == some_variable %}
// BAD: {% if block[id] == "id" or block.id %}
// FINE: <div data-block-id="{{ block.id }}">
// FINE:document.querySelector(`[data-block-id="${block.id}"]`)
async Comparison(node, ancesors) {
if (node.comparator === '==' && node.left.type === NodeTypes.VariableLookup && isUsingBlockId(node.left)) {
reportWarning(context, node.position);
}
},

// BAD {% case block.id %}
async VariableLookup(node, ancestors) {
const parentNode = ancestors.at(-1);
if (parentNode?.type === NodeTypes.LiquidTag && parentNode.name === 'case') {
if (isUsingBlockId(node)) {
reportWarning(context, node.position);
}
}
}
};
},
Copy link
Contributor

Choose a reason for hiding this comment

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

So tidy. So simple. So beautiful 🥹

.changeset/seven-tips-burn.md Outdated Show resolved Hide resolved
@miazbikowski miazbikowski marked this pull request as ready for review November 15, 2024 21:24
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