From df5f76872f415028951cd6d920058f54ede4931b Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 15 Jul 2025 10:18:29 +0100 Subject: [PATCH 1/4] Update docs for duplicate-key-in-dict-literal to relate. to python 3 --- .../src/Expressions/DuplicateKeyInDictionaryLiteral.py | 4 ++-- .../Expressions/DuplicateKeyInDictionaryLiteral.qhelp | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/python/ql/src/Expressions/DuplicateKeyInDictionaryLiteral.py b/python/ql/src/Expressions/DuplicateKeyInDictionaryLiteral.py index 14804d313005..b74e3fd02362 100644 --- a/python/ql/src/Expressions/DuplicateKeyInDictionaryLiteral.py +++ b/python/ql/src/Expressions/DuplicateKeyInDictionaryLiteral.py @@ -1,2 +1,2 @@ -dictionary = {1:"a", 2:"b", 2:"c"} -print dictionary[2] \ No newline at end of file +dictionary = {1:"a", 2:"b", 2:"c"} # BAD: `2` key is duplicated. +print(dictionary[2]) \ No newline at end of file diff --git a/python/ql/src/Expressions/DuplicateKeyInDictionaryLiteral.qhelp b/python/ql/src/Expressions/DuplicateKeyInDictionaryLiteral.qhelp index 19c4df9a5581..3aeea4b954c3 100644 --- a/python/ql/src/Expressions/DuplicateKeyInDictionaryLiteral.qhelp +++ b/python/ql/src/Expressions/DuplicateKeyInDictionaryLiteral.qhelp @@ -4,8 +4,8 @@

Dictionary literals are constructed in the order given in the source. -This means that if a key is duplicated the second key-value pair will overwrite -the first as a dictionary can only have one value per key. +This means that if a key is duplicated, the second key-value pair will overwrite +the first; as a dictionary can only have one value per key.

@@ -15,14 +15,14 @@ If they are then decide which value is wanted and delete the other one.

-

This example will output "c" because the mapping between 2 and "b" is overwritten by the -mapping from 2 to "c". The programmer may have meant to map 3 to "c" instead.

+

The following example will output "c", because the mapping between 2 and "b" is overwritten by the +mapping from 2 to "c". The programmer may have meant to map 3 to "c" instead.

-
  • Python: Dictionary literals.
  • +
  • Python: Dictionary literals.
  • From 7a7db0efe8854151349e7df58d2a5d0d946d6078 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 15 Jul 2025 10:42:25 +0100 Subject: [PATCH 2/4] Update unsupported format character documentaion, fix outdated reference link --- .../ql/src/Expressions/UnsupportedFormatCharacter.qhelp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/python/ql/src/Expressions/UnsupportedFormatCharacter.qhelp b/python/ql/src/Expressions/UnsupportedFormatCharacter.qhelp index b22d59a209c5..ae2f30afcb38 100644 --- a/python/ql/src/Expressions/UnsupportedFormatCharacter.qhelp +++ b/python/ql/src/Expressions/UnsupportedFormatCharacter.qhelp @@ -3,18 +3,19 @@ "qhelp.dtd"> -

    A format string, that is the string on the left hand side of an expression like fmt % arguments, must consist of legal conversion specifiers. +

    A printf-style format string (i.e. a string that is used as the left hand side of the % operator, such as fmt % arguments) +must consist of valid conversion specifiers, such as %s, %d, etc. Otherwise, a ValueError will be raised.

    -

    Choose a legal conversion specifier.

    +

    Ensure a valid conversion specifier is used.

    -

    In format_as_tuple_incorrect, "t" is not a legal conversion specifier. +

    In the following example, format_as_tuple_incorrect, %t is not a valid conversion specifier.

    @@ -22,7 +23,7 @@ Otherwise, a ValueError will be raised.
    -
  • Python Library Reference: String Formatting.
  • +
  • Python Library Reference: printf-style String Formatting.
  • From 909f57261c59cf64def58e5e9bc4dfd26b578352 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 15 Jul 2025 13:26:46 +0100 Subject: [PATCH 3/4] Minor doc updates; updating python 2 references to python 3 and updating grammar --- python/ql/src/Exceptions/CatchingBaseException.qhelp | 6 +++--- python/ql/src/Exceptions/EmptyExcept.qhelp | 4 ++-- python/ql/src/Expressions/CallToSuperWrongClass.qhelp | 4 ++-- python/ql/src/Expressions/ExplicitCallToDel.qhelp | 2 +- .../ql/src/Expressions/IncorrectComparisonUsingIs.qhelp | 2 +- python/ql/src/Expressions/IncorrectComparisonUsingIs.ql | 2 +- python/ql/src/Functions/ConsistentReturns.qhelp | 4 ++-- python/ql/src/Functions/ConsistentReturns.ql | 4 ++-- python/ql/src/Functions/InitIsGenerator.qhelp | 2 +- .../Functions/ModificationOfParameterWithDefault.qhelp | 2 +- .../Functions/return_values/ConsistentReturns.expected | 8 ++++---- 11 files changed, 20 insertions(+), 20 deletions(-) diff --git a/python/ql/src/Exceptions/CatchingBaseException.qhelp b/python/ql/src/Exceptions/CatchingBaseException.qhelp index 725f9ce465ba..bde17418aa76 100644 --- a/python/ql/src/Exceptions/CatchingBaseException.qhelp +++ b/python/ql/src/Exceptions/CatchingBaseException.qhelp @@ -45,10 +45,10 @@ leaving KeyboardInterrupt to propagate. -
  • Python Language Reference: The try statement, -Exceptions.
  • +
  • Python Language Reference: The try statement, +Exceptions.
  • M. Lutz, Learning Python, Section 35.3: Exception Design Tips and Gotchas, O'Reilly Media, 2013.
  • -
  • Python Tutorial: Errors and Exceptions.
  • +
  • Python Tutorial: Errors and Exceptions.
  • diff --git a/python/ql/src/Exceptions/EmptyExcept.qhelp b/python/ql/src/Exceptions/EmptyExcept.qhelp index 9b7ef09643fb..f968c65af196 100644 --- a/python/ql/src/Exceptions/EmptyExcept.qhelp +++ b/python/ql/src/Exceptions/EmptyExcept.qhelp @@ -7,7 +7,7 @@ The loss of information can lead to hard to debug errors and incomplete log files. It is even possible that ignoring an exception can cause a security vulnerability. An empty except block may be an indication that the programmer intended to -handle the exception but never wrote the code to do so.

    +handle the exception, but never wrote the code to do so.

    @@ -15,7 +15,7 @@ handle the exception but never wrote the code to do so.

    -

    In this example the program keeps running with the same privileges if it fails to drop to lower +

    In this example, the program keeps running with the same privileges if it fails to drop to lower privileges.

    diff --git a/python/ql/src/Expressions/CallToSuperWrongClass.qhelp b/python/ql/src/Expressions/CallToSuperWrongClass.qhelp index dc88b1bea88c..7a2516329f4a 100644 --- a/python/ql/src/Expressions/CallToSuperWrongClass.qhelp +++ b/python/ql/src/Expressions/CallToSuperWrongClass.qhelp @@ -24,7 +24,7 @@ However, this may result in incorrect object initialization if the enclosing cla

    -In this example the call to super(Vehicle, self) in Car.__init__ is incorrect as it +In this example, the call to super(Vehicle, self) in Car.__init__ is incorrect, as it passes Vehicle rather than Car as the first argument to super. As a result, super(SportsCar, self).__init__() in the SportsCar.__init__ method will not call all __init__() methods because the call to super(Vehicle, self).__init__() @@ -37,7 +37,7 @@ skips StatusSymbol.__init__(). -

  • Python Standard Library: super.
  • +
  • Python Standard Library: super.
  • Artima Developer: Things to Know About Python Super.
  • diff --git a/python/ql/src/Expressions/ExplicitCallToDel.qhelp b/python/ql/src/Expressions/ExplicitCallToDel.qhelp index 9ec18b46918e..3e6b79c929f8 100644 --- a/python/ql/src/Expressions/ExplicitCallToDel.qhelp +++ b/python/ql/src/Expressions/ExplicitCallToDel.qhelp @@ -17,7 +17,7 @@ wrap the use of the object in a with statement. -

    In the first example, rather than close the zip file in a conventional manner the programmer has called __del__. +

    In the first example, rather than close the zip file in a conventional manner, the programmer has called __del__. A safer alternative is shown in the second example.

    diff --git a/python/ql/src/Expressions/IncorrectComparisonUsingIs.qhelp b/python/ql/src/Expressions/IncorrectComparisonUsingIs.qhelp index b8c25fa04a24..b1df1e8b8b7c 100644 --- a/python/ql/src/Expressions/IncorrectComparisonUsingIs.qhelp +++ b/python/ql/src/Expressions/IncorrectComparisonUsingIs.qhelp @@ -37,7 +37,7 @@ either of the alternatives below.
    -
  • Python Standard Library: Comparisons.
  • +
  • Python Standard Library: Comparisons.
  • diff --git a/python/ql/src/Expressions/IncorrectComparisonUsingIs.ql b/python/ql/src/Expressions/IncorrectComparisonUsingIs.ql index 6eda4abbde21..fa0ca14669f6 100644 --- a/python/ql/src/Expressions/IncorrectComparisonUsingIs.ql +++ b/python/ql/src/Expressions/IncorrectComparisonUsingIs.ql @@ -1,6 +1,6 @@ /** * @name Comparison using is when operands support `__eq__` - * @description Comparison using 'is' when equivalence is not the same as identity + * @description Comparison using `is` when equivalence is not the same as identity * @kind problem * @tags quality * reliability diff --git a/python/ql/src/Functions/ConsistentReturns.qhelp b/python/ql/src/Functions/ConsistentReturns.qhelp index cd29062ada66..62162a2c1c48 100644 --- a/python/ql/src/Functions/ConsistentReturns.qhelp +++ b/python/ql/src/Functions/ConsistentReturns.qhelp @@ -6,7 +6,7 @@

    When a function contains both explicit returns (return value) and implicit returns -(where code falls off the end of a function) this often indicates that a return +(where code falls off the end of a function), this often indicates that a return statement has been forgotten. It is best to return an explicit return value even when returning None because this makes it easier for other developers to read your code.

    @@ -29,7 +29,7 @@ return value of None as this equates to False. However
    -
  • Python Language Reference: Function definitions. +
  • Python Language Reference: Function definitions.
  • diff --git a/python/ql/src/Functions/ConsistentReturns.ql b/python/ql/src/Functions/ConsistentReturns.ql index a1b308514562..1bc7b5724b36 100644 --- a/python/ql/src/Functions/ConsistentReturns.ql +++ b/python/ql/src/Functions/ConsistentReturns.ql @@ -1,6 +1,6 @@ /** * @name Explicit returns mixed with implicit (fall through) returns - * @description Mixing implicit and explicit returns indicates a likely error as implicit returns always return 'None'. + * @description Mixing implicit and explicit returns indicates a likely error as implicit returns always return `None`. * @kind problem * @tags quality * reliability @@ -31,4 +31,4 @@ predicate has_implicit_return(Function func) { from Function func where explicitly_returns_non_none(func) and has_implicit_return(func) select func, - "Mixing implicit and explicit returns may indicate an error as implicit returns always return None." + "Mixing implicit and explicit returns may indicate an error, as implicit returns always return None." diff --git a/python/ql/src/Functions/InitIsGenerator.qhelp b/python/ql/src/Functions/InitIsGenerator.qhelp index 113e444d1f39..d1144815c7fc 100644 --- a/python/ql/src/Functions/InitIsGenerator.qhelp +++ b/python/ql/src/Functions/InitIsGenerator.qhelp @@ -22,7 +22,7 @@ not logical in the context of an initializer.

    -
  • Python: The __init__ method.
  • +
  • Python: The __init__ method.
  • diff --git a/python/ql/src/Functions/ModificationOfParameterWithDefault.qhelp b/python/ql/src/Functions/ModificationOfParameterWithDefault.qhelp index 39bb484f8917..12714a68364d 100644 --- a/python/ql/src/Functions/ModificationOfParameterWithDefault.qhelp +++ b/python/ql/src/Functions/ModificationOfParameterWithDefault.qhelp @@ -37,7 +37,7 @@ function with a default of default=None, check if the parameter is
  • Effbot: Default Parameter Values in Python.
  • -
  • Python Language Reference: Function definitions.
  • +
  • Python Language Reference: Function definitions.
  • diff --git a/python/ql/test/query-tests/Functions/return_values/ConsistentReturns.expected b/python/ql/test/query-tests/Functions/return_values/ConsistentReturns.expected index 1bb6a25860be..302a327a1444 100644 --- a/python/ql/test/query-tests/Functions/return_values/ConsistentReturns.expected +++ b/python/ql/test/query-tests/Functions/return_values/ConsistentReturns.expected @@ -1,4 +1,4 @@ -| functions_test.py:18:1:18:11 | Function cr1 | Mixing implicit and explicit returns may indicate an error as implicit returns always return None. | -| functions_test.py:22:1:22:11 | Function cr2 | Mixing implicit and explicit returns may indicate an error as implicit returns always return None. | -| functions_test.py:336:1:336:16 | Function ok_match | Mixing implicit and explicit returns may indicate an error as implicit returns always return None. | -| functions_test.py:344:1:344:17 | Function ok_match2 | Mixing implicit and explicit returns may indicate an error as implicit returns always return None. | +| functions_test.py:18:1:18:11 | Function cr1 | Mixing implicit and explicit returns may indicate an error, as implicit returns always return None. | +| functions_test.py:22:1:22:11 | Function cr2 | Mixing implicit and explicit returns may indicate an error, as implicit returns always return None. | +| functions_test.py:336:1:336:16 | Function ok_match | Mixing implicit and explicit returns may indicate an error, as implicit returns always return None. | +| functions_test.py:344:1:344:17 | Function ok_match2 | Mixing implicit and explicit returns may indicate an error, as implicit returns always return None. | From 0f5be2d0961decfcfc6a96f3b2b79cbe2805acdd Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 15 Jul 2025 13:33:57 +0100 Subject: [PATCH 4/4] Update python/ql/src/Expressions/DuplicateKeyInDictionaryLiteral.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- python/ql/src/Expressions/DuplicateKeyInDictionaryLiteral.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/src/Expressions/DuplicateKeyInDictionaryLiteral.py b/python/ql/src/Expressions/DuplicateKeyInDictionaryLiteral.py index b74e3fd02362..ea051fcd1530 100644 --- a/python/ql/src/Expressions/DuplicateKeyInDictionaryLiteral.py +++ b/python/ql/src/Expressions/DuplicateKeyInDictionaryLiteral.py @@ -1,2 +1,2 @@ -dictionary = {1:"a", 2:"b", 2:"c"} # BAD: `2` key is duplicated. +dictionary = {1:"a", 2:"b", 2:"c"} # BAD: The `2` key is duplicated. print(dictionary[2]) \ No newline at end of file pFad - Phonifier reborn

    Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

    Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


    Alternative Proxies:

    Alternative Proxy

    pFad Proxy

    pFad v3 Proxy

    pFad v4 Proxy