Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Uniwersalny preprocesor kodu źródłowego
K0FF
post 30.12.2017, 23:56:44
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 30.12.2017

Ostrzeżenie: (0%)
-----


Programując w PHP oraz w kilku innych językach skryptowych brakowało mi czegoś w rodzaju preprocesora kodu źródłowego: czegoś co np. usunie zbędne fragmenty kodu w wersji produkcyjnej skryptu lub połączy kilka plików w jeden [..,itd]. Używaliśmy w tych celach różnych narzędzi i skryptów, które w pewien sposób "dawały radę", ale postanowiłem stworzyć coś bardziej uniwersalnego [..] i napisałem jakiś czas temu w Pythonie ("oswajam węża") coś w rodzaju uniwersalnego preprecesora kodu źródłowego, który można uruchomić by wykonał polecenia z komentarzy i np. wygenerował nowy plik wyjściowy z wersją na produkcje.

Pogram raczej spodobał się moim znajomym, którzy go testowali przez ostatnie dwa tygodnie, a teraz jest w tzw. fazie publicznej alfy i jak na razie wszystko działa dobrze. Ponieważ podejrzewam, że mój program może tutaj kogoś zainteresować, to prywatnie będę mile wdzięczny za rzucenie okiem i feedback, oraz w miarę możliwości i zainteresowania zapraszam do zabawy.

https://github.com/k0ff/blox

Ten post edytował K0FF 30.12.2017, 23:57:34
Go to the top of the page
+Quote Post
Pyton_000
post 31.12.2017, 13:11:45
Post #2





Grupa: Zarejestrowani
Postów: 7 314
Pomógł: 1291
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Jako że ja też troszkę z Pythonem miałem przyjemność to pozwoliłem sobie zerknąć w kod smile.gif

Do tworzenia CLI ja używałem Docopt: https://github.com/docopt/docopt
Jest fajny wygodny i uprasszcza cały proces tworzenia parametrów.

- Nie stosuj @ w argumentach. źle to wygląda i kiepsko używa.
- Jako argumenty metod użuwaj małych liter, duże stosuje się do CONS


Z tego co rozumiem to robię sobie pliczek .bx który zawiera definicje np. że mogę sobie coś gdzieś dopisać, coś usunąć z kodu. Nadawałoby się to w sumie jako tool podpięty pod Git Hook do robienia czegoś.
Ogólnie fajny pomysm.

PS. Pod jaką wersję Pythona pisaleś? 2.7?
Go to the top of the page
+Quote Post
K0FF
post 31.12.2017, 16:58:07
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 30.12.2017

Ostrzeżenie: (0%)
-----


Program pisałem z myślą o Python.3.x, ale tak by działał też na Pythonie 2.7 testując go pobieżnie na obu wersjach.
W wolnej chwili z chęcią przetestuje ten Docopt gdy będę miał wolną chwilę, ale nieprędko bo ogólnie mam tzw. "noworoczną" reorganizacje pracy wink.gif
Ogólnie najfajniej by było zrobić, by można instalować ten program przez pip, ale jeszcze nie wiem co i jak z tym..

Co do tych argumentów z tą @ to chciałem oddzielić argumenty wpływające na interpreter i z mojego założenia to powinno się ich używać w szczególnych przypadkach, np. podczas debugowania skryptów itp. a pozostałe argumenty są traktowane jak zmienne interpretera np. wykonując `blox --@debug` debugujemy nasz skrypt, a `blox --debug` ustawiamy zmienną debug na true i możemy jej używać w interpreterze np. w skrypcie

```
  1. <?php
  2. // ...
  3. # @blox: when: debug:
  4. if( PHP_DEBUG )
  5. {
  6. // zbędny kod //
  7. }
  8. # @blox: end;
  9. // ..
  10. ?>

```

gdy np. wykonamy `blox plik.php wyjscie.php --not-debug` to na pliku wyjściowym nie będziemy mieli tak oznaczonego kodu, który służył nam np. tylko do debugowania czegoś tam jedynie na deweloperce. Co do tych argumentów pisanych dużą literą może rzeczywiście[..], ale czytałem jakiegoś PEP'a i tam były jakieś przykłady, które mogłem źle zrozumieć, że niektóre ważniejsze obiekty były nazywane dużymi literami i pomyślałem [..], zresztą nieważne - ograniczę to w przyszłości, by nie było z tego powodów jakiś niejasności w nazewnictwie zmiennych.

Ogólnie to pliki bx są dodane do repozytorium jako przykłady zamiast dokumentacji (na której eleganckie opracowanie nie znalazłem wolnego czasu), by po rzuceniu okiem na taki plik mniej-więcej wiedzieć jak wygląda składnia preprocesora, ale ponieważ polecenia są interpretowane tylko z linijek rozpoczynających się jako komentarze to z założenia można je wstawiać w dowolnym kodzie źródłowym, do czego właśnie powstało to narzędzie i sam mam zamiar używać go z git hook'ami, bo przyda mi się do pewnych zastosowań.

Dzięki za zainteresowanie
SZCZĘŚLIWEGO NOWEGO ROKU!
Pozdrawiam wink.gif
Go to the top of the page
+Quote Post
Pyton_000
post 1.01.2018, 20:57:57
Post #4





Grupa: Zarejestrowani
Postów: 7 314
Pomógł: 1291
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Jeśli chodzi o zmienne do skryptu to chyba lepiej będzie używać po prostu environments, a to cli przekazywać tylko opcje które wpływają na progam.

Ew. jak już chcesz przekazywać w cli to możesz np. `-e var=val -e var2=val2` itd.

Co do PIP: https://marthall.github.io/blog/how-to-package-a-python-app/

szybko łatwo i przyjemnie smile.gif

Przeglądając pliki bx w miarę przyswoiłem co i jak działa więc jest to w miarę przystępna forma dokumentacji.
Go to the top of the page
+Quote Post
K0FF
post 3.01.2018, 13:24:04
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 30.12.2017

Ostrzeżenie: (0%)
-----


Jeszcze w tym miesiącu zrobię z tego pakiet, a co zmiennych: blox jeśli nie zdefiniowaliśmy nim zmiennej to bierze zmienne systemowe, tzn. używając {@:nazwa.zmiennej} bierze pierw zmienną lokalną, a jeśli takiej niema to użyje zmiennej systemowej, jest w repozytorium taki przykład co używa {@:zmienna}, {#:zmienna}, {$:zmienna}, gzie dodatkowo # to tylko zmienne lokalne interpretera, a $ to tylko zmienne systemowe.

Dodałem zmienne jako parametr w cli, bo wpływają one na wyjście (np. bloki warunkowe) w procesie generowania wyjścia. Można używać --zmiennej, --not-zmienna --zmienna:wartość by np. za pomocą jednego hook'a wygenerować kilka wersji pliku itp.

Będę jeszcze działał w temacie tego procesora za kilka miesięcy (na wiosnę) jak go trochę sam poużywam w jakiś swoich projektach i zbiorę feedback od znajomych i zainteresowanych (mam lokalnie plik blox.todo). Teraz jak będę miał wolny czas na pythona to będę uczył się jak pracować z źródłami danych - jak baza danych sqlite, pliki xml i json itp. by móc już coś konkretnego zaprogramować w tym języku, bo mam od dłuższego czasu pomysł na dwa inne i niezobowiązujące programy, które będę sobie pisał w pythonie po godzinach w zależności od ochoty, które z założenia - w dłuższej perspektywie ułatwią mi codzienną prace i pozwolą opanować w praktyce kolejny język programowania, ale to jest już temat na inny wątek.

Ten post edytował K0FF 3.01.2018, 13:24:25
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.05.2018 - 11:01