Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Enable flake8-bugbear (B) and review further ruff rule sets

Fermée
#71 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@ryan-kipawa y travaille déjà.

Depuis le 9/10/2026.

  • #74 par @ryan-kipawa — ouverte

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
25/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
À l'abandon
Stack technique
python

Piste de recherche

Start by checking linked PR #74, since it may already cover this work. The rule set is in pyproject.toml; add B and ignore B008. The five delete-value setters in mikecore/DfsBuilder.py (around lines 124-160) need self.__CheckBuildStage1() with the parentheses added, and tests/examples_dfsu.py (line 297) and tests/test_dfsu_file.py (line 1264) hold the two stray expressions. Done when ruff reports no B findings, the pre-commit hooks pass, and a new test shows that setting a delete value after CreateFile raises an error.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Why

Five DfsBuilder delete-value setters never run their build-stage check, because the call is missing its parentheses:

https://github.com/DHI/mikecore-python/blob/257982a31c1e131b73df32cd852827e72581269d/mikecore/DfsBuilder.py#L132-L134

def SetDeleteValueDouble(self, value):
    self.__CheckBuildStage1          # looks the method up, never calls it
    self.FileInfo.DeleteValueDouble = value

The same line is in SetDeleteValueFloat, SetDeleteValueByte, SetDeleteValueInt and SetDeleteValueUnsignedInt (L124, L133, L142, L151, L160). Every other setter calls self.__CheckBuildStage1(). So a delete value can be changed after CreateFile without an error, after the header has already been written.

The same rule finds two more bugs in the tests:

  • tests/examples_dfsu.py#L297: a bare topLayerOffset, left over from a C# declaration, reads a local before it is assigned. So ExtractDfsu2DLayerFrom3D raised NameError on every call. It is fixed in #66.
  • tests/test_dfsu_file.py#L1264: a bare Assert.IsTrue that is never called, so that line asserts nothing.

None of our checks reports these. Ruff runs only E4, E7, E9, F and UP (pyproject.toml), and none of those rules looks at expressions whose value is discarded. A type checker (pyrefly, #66) accepts an uncalled bound method as a valid expression. flake8-bugbear's B018 (useless expression) finds exactly these 7 lines and nothing else.

Proposal

Add the bugbear rules (B) to ruff's select, ignoring B008, and fix what they report. On master that is 29 findings:

Rule Hits Finding
B018 useless expression 7 The 5 setters and the 2 test lines above. Real bugs.
B017 pytest.raises(Exception) 4 tests/test_dfsbuilder.py. These pass on any error, including one caused by a bug. Add match=.
B904 raise in except without from 11 SetNodes in both builders and MeshFile. Adding from err keeps the cause in the traceback.
B007 unused loop variable 3 Rename to _j / _i.
B008 call in a default argument 4 Not bugs (DfsParameters() is never mutated, np.float32 is immutable), so ignore the rule. B006 (mutable defaults) still applies.

The rules with no findings today are still worth having in a codebase ported from C#: B015 (a comparison used as a statement, where an assert was meant), B011 (assert False), B023 (a closure over a loop variable), B006 (a mutable default argument) and B905 (zip() without strict=, which #66's new tests would trip).

Once B is in, other rule sets could be reviewed the same way, each with its findings on master. Candidates are PT (pytest style), SIM, and PL errors (PLE).

Done when

  • select includes B, B008 is ignored with a reason, and uvx pre-commit run --all-files passes.
  • The 5 setters call self.__CheckBuildStage1(), with a test that setting a delete value after CreateFile raises an error.
Langage dominant
Python
Étoiles
5
Forks
1
Merge moyen
1 j 15 h
PR mergées (30 j)
16

Préparer son environnement

  • Fournit un Dockerfile ou un fichier Docker Compose
  • Aucun modèle de pull request
  • Aucun guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de DHI/mikecore-python

Toutes les issues de DHI/mikecore-python

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.