Göm meny

PEP 8 och PEP 257

PEP8 och PEP257 är två dokument som beskriver kodstandard, respektive standard för dokumentationssträngar, för Python. PEP står för Python Enhancement Proposals och utgör Pythons design- och styrdokument.

Linter

En linter är ett verktyg som används vid programmering som hjälper programmeraren hitta olika typer av problem med kod (mer info) utan att nödvändigtvis köra koden.

För att t.ex. kontrollera att en fil följer PEP8 och PEP257 kan man använda lint-programmen pycodestyle och pydocstyle.

I terminalen

I LiUs Linux-miljö

  • Använd pycodestyle <fil> för att kontrollera att PEP8 följs.
  • Använd pydocstyle <fil> för att kontrollera att PEP257 följs.

På egen dator

  • Installera python-paketen pydocstyle och pycodestyle.
  • Kontrollera filer enligt ovan.

I Visual Studio Code

I LiUs Linux-miljö

Nedanstående gäller VSCodes Python-extension upp till och med version 2023.14 som i skrivande stund (December 2023) är senaste versionen i LiUs Linux-miljö. Om denna uppdaterats till 2023.16 eller senare kan man köra enligt instruktionerna för egen dator.

Använder man den settings.json-fil som finns tillgänglig i kurskatalogen, och som man skulle hämta i Laboration 1, så är pycodestyle (som kontrollerar att koden följer PEP8), samt pydocstyle (som kontrollerar att koden följer PEP257), redan aktiverade. Dessa börjar dock inte fungera förrän man har installerat Python-tillägget i VSCode.

På egen dator

Tidigare kunde man, när man installerat Python-tillägget i Visual Studio Code, konfigurera tillägget så att det använder sig av något linter verktyg precis som i LiUs Linuxmiljö (som kör en något äldre version av VSCode och dess Python-extension). Sedan hösten 2023 har dock denna funktionalitet tagits bort för att göra plats för specialiserade extensions som enbart utför linting.

Några populära extensions för Python-linting i VSCode är Pylint, flake8 och Ruff. Ruff är den mest allsidiga och den enda som i dagsläget kan ersätta pydocstyle.

Ruff

VSCodes Ruff-extension installeras på samma sätt som dess Python-extension. Dock behöver man söka efter Ruff.

Korrekta inställningar för Ruff finns också i den settings.json-fil som finns tillgänglig i kurskatalogen, och som man skulle hämta i Laboration 1. Har man inte hämtat den och lagt den på rätt ställe kan man behöva aktivera Ruff manuellt.

Aktivera linting med Ruff

För att sedan aktivera linting motsvarande pycodestyle och pydocstyle går man till File -> Preferences -> Settings. Där klickar man på menyvalet Extensions och sedan Ruff. En bit ner i Ruff-avsnittet finns inställningen Lint: Args. Klicka på den Add Item-knappen så får du ett textfält där du skriver in --select=E,W,D och sedan klickar du på OK.

Detta säger åt Ruff att använda linting-reglerna för fel enligt pycodestyle (E), varningar enligt pycodestyle (W) och varningar enligt pydocstyle (D).

För att hitta andra linting-regler man vill lägga till kan man titta i Ruffs dokumentation över tillgängliga regler. Några särskilt intressanta är Pyflakes (F), isort (I), flake8-builtins (A), flake8-return (RET), flake8-comprehensions (C4), flake8-executable (EXE) och flake8-unused-arguments (ARG). Vill man använda t.ex. isort och flake8-return lägger man till dessa i select-argumentet, dvs --select=E,W,D,I,RET. Det går att aktivera alla linting-regler i Ruff genom att sätta --select=ALL men detta är inte rekommenderat.


Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2023-12-04