Fix FPs around custom managed records in VariableInitialization - #469
Open
Bazooper-blip wants to merge 1 commit into
Open
Bazooper-blip wants to merge 1 commit into
Bazooper-blip wants to merge 1 commit into
Conversation
Local custom managed records with an `Initialize` operator are initialized automatically by Delphi, but we were tracking them like any other unmanaged record and flagging them as uninitialized. Records declaring an `Initialize` operator are now treated like other managed types, both as local variables and as fields of other records. Records with only a `Finalize` operator, and `out` parameters of custom managed record types, are still checked as before. Closes integrated-application-development#468
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.
This PR fixes false positives in
VariableInitializationon custom managed records. Delphi initializes a local custom managed record automatically through itsInitializeoperator, but the rule tracked it like any other unmanaged record, so code like the example in the issue was flagged even though the record had been initialized.Records that declare an
Initializeoperator are now treated like the managed types the rule already exempts (strings, variants, interfaces and arrays). This applies to localvarsections, inlinevardeclarations and fields of other records, where the containing record's other fields are still checked. Both theInitialize(out Dest: T)form and the implicit-Selfclass operator Initialize;form are recognized.Two cases are intentionally still checked:
Finalizeoperator, since their unmanaged fields aren't initialized.outparameters of custom managed record types, in line with 3614f61 treatingoutparameters as uninitialized. This also keeps the check working inside theInitializeoperator itself.I've also listed these records as an exception in the rule description and added a changelog entry.
Fixes #468.