Fix negation handling in IF function parameters for conditional expressions#585
Draft
Fix negation handling in IF function parameters for conditional expressions#585
Conversation
…sDataItem(...)) Co-authored-by: silvath <2657156+silvath@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Fix failed condition for ppElementDisabled in user permissions
Fix negation handling in IF function parameters for conditional expressions
Oct 21, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The Drapo expression parser was incorrectly handling negation (
!) when used within function parameters, causing conditional expressions likeIF(!ContainsDataItem(...))to fail. This affected security-related UI components where permissions needed to be checked with negated conditions.Working patterns:
Failing pattern:
Root Cause
The
GetFunctionStartmethod inDrapoParser.tswas incorrectly stripping the!character from function expressions when they appeared as parameters to other functions. The parsing flow was:IF(!ContainsDataItem(...))gets parsed correctly as IF function with parameter!ContainsDataItem(...)ParseFunctionscallsGetFunctionStarton!ContainsDataItem(...)GetFunctionStartskips the!character, thinking it's invalidContainsDataItem(...)without negation - losing the logical conditionSolution
Modified the function start detection logic to intelligently handle negation:
ShouldSkipFunctionStartCharacter: Analyzes whether!should be skipped based on context!when it's a standalone negation, preserves it when part of valid function parametersThe fix specifically handles cases where
!is followed by a valid function call pattern (e.g.,!ContainsDataItem(...)) and preserves the negation in those contexts.Testing
Added comprehensive test coverage for:
IF(!ContainsDataItem(...))- the main fix!IF(ContainsDataItem(...))- backwards compatibility verificationd-classattribute integration with negated conditionsSecurity & Quality
This fix enables more flexible permission checking patterns in Drapo applications while maintaining full backwards compatibility.
Original prompt
Fixes #584
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.