Przykład ten demonstruje działanie systemu Intract w dwóch niezależnych trybach:
@intract.v1 bezpośrednio nad funkcjami w plikach źródłowych..toon oraz .toon.yaml, bez modyfikacji plików źródłowych.Adnotacja @intract.v1 znajduje się bezpośrednio przed kodem, którego dotyczy.
Przykład w examples/python/parse_extensions.py:
# @intract.v1 scope:function intent:parse:extensions priority:2 forbid:network
def parse_extensions(raw_extensions: str):
...
.toon lub intract.toon.yaml)Kontrakty są całkowicie oddzielone od kodu źródłowego i zdefiniowane w dedykowanych plikach, mapując zasady za pomocą koordynatów docelowych (target):
file)func / function)line)xpath / xpatch dla plików HTML/DOM).toon)Plik .toon to płaski plik tekstowy, w którym każda linia reprezentuje pojedynczy kontrakt zaadresowany za pomocą standardu URI:
intract://<file_path>?func=<function_name>&line=<line_number>&xpath=<xpath_expression>#id=<contract_id>&intent=<action-object>&forbid=<forbidden_effects>
examples/toon/intract.toon:# Płaskie adresowanie linia po linii dla calc.py, index.html oraz auth.js
intract://src/calc.py?func=add#id=pure-addition&intent=pure-add&forbid=write
intract://src/calc.py?func=write_to_log&line=13#id=log-write&intent=write-log&req=write
intract://src/index.html?xpath=//button[@id="btn-add"]#id=dom-button-check&intent=click-btn&req=auth
intract://src/auth.js?func=login#id=auth-login&intent=perform-login&forbid=network
examples/toon/
├── README.md # Ta dokumentacja
├── Makefile # Skróty komend (make validate, make validate-uri...)
├── validate.sh # Skrypt uruchamiający automatyczną walidację
├── intract.toon # Płaski manifest URI
├── intract.toon.yaml # Manifest YAML z sekcją target (100% odpowiednik intract.toon)
└── src/
├── calc.py # Kod kalkulatora (Python)
├── auth.js # Moduł uwierzytelniania (JavaScript)
└── index.html # Plik HTML z przyciskami (DOM / XPath)
Możesz uruchomić pełną walidację obu manifestów za pomocą jednego polecenia:
# Walidacja obu formatów manifestu
make validate
.toon (URI):
make validate-uri
make validate-yaml
# Ręczna walidacja za pomocą płaskiego pliku .toon
python -m intract validate examples/toon --manifest examples/toon/intract.toon
# Ręczna walidacja za pomocą toon.yaml
python -m intract validate examples/toon --manifest examples/toon/intract.toon.yaml