slogan3

Creëer een Fortran-programma voor automatische documentatie van code

description

Met deze prompt krijg je een op maat gemaakt Fortran-programma dat automatisch documentatie genereert, waardoor je tijd bespaart en de kwaliteit van je code-onderhoud verbetert. Het helpt fouten te verminderen en maakt samenwerking makkelijker doordat documentatie altijd actueel is. Dit is efficiënter dan handmatige documentatie en zorgt voor consistente resultaten.

prompt

Help me een Fortran-programma te maken dat automatisch documentatie genereert voor mijn code. Specificaties: - Beschrijving van de codebase of module: <geef een korte beschrijving van de codebase of module> - Welke documentatie-informatie wil ik genereren (bijvoorbeeld: functiebeschrijvingen, variabelen, input/output specificaties): ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een eenvoudig Fortran-programma dat automatisch documentatie genereert in Markdown-formaat voor jouw codebase. Dit programma leest een bronbestand, zoekt naar speciale commentaarregels die functiebeschrijvingen en input/output specificaties bevatten, en genereert daaruit een gestructureerde Markdown-documentatie. **Voorbeeld Fortran-programma:** ```fortran program generate_docs implicit none character(len=*), parameter :: input_file = 'jouw_code.f90' character(len=*), parameter :: output_file = 'documentatie.md' integer :: unit_in, unit_out, ios character(len=1024) :: line logical :: in_function = .false. character(len=256) :: current_function = '' integer :: line_number = 0 ! Open het bronbestand open(newunit=unit_in, file=input_file, status='old', action='read', iostat=ios) if (ios /= 0) then print *, 'Fout bij openen van inputbestand.' stop end if ! Open het outputbestand open(newunit=unit_out, file=output_file, status='replace', action='write', iostat=ios) if (ios /= 0) then print *, 'Fout bij openen van outputbestand.' stop end if write(unit_out, '(A)') '# Documentatie voor Numerieke rekencode voor thermische analyse' write(unit_out, '(A)') '## Functiebeschrijvingen en specificaties' write(unit_out, *) do read(unit_in, '(A)', iostat=ios) line if (ios /= 0) exit line_number = line_number + 1 ! Zoek naar functiebeschrijvingen if (index(line, '!@functie') /= 0) then ! Voorbeeld: !@functie BerekenTemperatuur call process_function(line, current_function, unit_out) in_function = .true. else if (in_function .and. index(line, '!@input') /= 0) then call process_input(line, current_function, unit_out) else if (in_function .and. index(line, '!@output') /= 0) then call process_output(line, current_function, unit_out) else if (line == '') then in_function = .false. end if end do close(unit_in) close(unit_out) contains subroutine process_function(line, func_name, out) character(len=*), intent(in) :: line character(len=*), intent(inout) :: func_name integer, intent(in) :: out character(len=256) :: fname fname = trim(line(9:)) ! Na de '!@functie ' func_name = fname write(out, '(A)') '### Functie: ' // trim(fname) write(out, '(A)') 'Beschrijving:' end subroutine process_function subroutine process_input(line, func_name, out) character(len=*), intent(in) :: line character(len=*), intent(in) :: func_name integer, intent(in) :: out character(len=256) :: input_desc input_desc = trim(line(8:)) ! Na '!@input ' write(out, '(A)') '- **Input voor `' // trim(func_name) // '`**: ' // trim(input_desc) end subroutine process_input subroutine process_output(line, func_name, out) character(len=*), intent(in) :: line character(len=*), intent(in) :: func_name integer, intent(in) :: out character(len=256) :: output_desc output_desc = trim(line(9:)) ! Na '!@output ' write(out, '(A)') '- **Output van `' // trim(func_name) // '`**: ' // trim(output_desc) end subroutine process_output end program generate_docs ``` **Gebruik:** - Voeg in je Fortran-code commentaar toe in het volgende formaat: ```fortran !@functie BerekenTemperatuur !@input Temperatuur, Tijd !@output Temperatuur na berekening subroutine BerekenTemperatuur(...) ! code end subroutine ``` - Plaats dit programma in dezelfde directory als je codebestand en noem het bijvoorbeeld `generate_docs.f90`. - Compileer en voer uit: ```bash gfortran generate_docs.f90 -o generate_docs ./generate_docs ``` - De gegenereerde documentatie komt in `documentatie.md`. --- **Integratie in je ontwikkelworkflow en tips voor automatisering:** 1. **Automatiseren met Makefile of scripts:** - Voeg een stap toe in je buildproces (bijvoorbeeld in een Makefile) die dit script automatisch uitvoert na elke codewijziging. - Voorbeeld: `make generate_docs` 2. **Gebruik versiebeheer hooks:** - Integreer het genereren van documentatie in je Git hooks (bijvoorbeeld pre-commit of pre-push) zodat de documentatie altijd up-to-date is. 3. **CI/CD integratie:** - Voeg in je CI-pipeline een stap toe die de documentatie automatisch bijwerkt en controleert. 4. **Verbetering van commentaarformat:** - Gebruik consistente en gestructureerde commentaarblokken zodat het script ze eenvoudig kan parseren. 5. **Extra functionaliteiten:** - Breid het script uit om ook variabelen, globale parameters en meer gedetailleerde beschrijvingen te verwerken. - Overweeg het gebruik van bestaande tools of parserlibraries voor Fortran (zoals fparser) indien beschikbaar. Door deze aanpak wordt je documentatie automatisch en consistent bijgewerkt, wat tijd bespaart en de kwaliteit van je project verhoogt.
provider: deepseek
model: deepseek-chat
Hier is een Fortran-programma dat automatisch Markdown-documentatie genereert voor uw numerieke rekencode: ```fortran program auto_documentatie implicit none character(len=100) :: bestandsnaam, regel, functienaam character(len=500) :: beschrijving integer :: iostat, eenheid, i logical :: in_functie = .false. ! Open uitvoerbestand voor documentatie open(newunit=eenheid, file='THERMISCHE_ANALYSE_DOC.md', status='replace') ! Schrijf hoofdtitel write(eenheid, '(a)') '# Documentatie Numerieke Thermische Analyse Code' write(eenheid, '(a)') '## Codebase Beschrijving' write(eenheid, '(a)') 'Numerieke rekencode voor thermische analyse en warmteoverdracht simulaties.' write(eenheid, '(a)') '' ! Loop door alle Fortran-bestanden in de directory call execute_command_line('ls *.f90 > bestanden.lst') open(newunit=10, file='bestanden.lst', status='old') do read(10, '(a)', iostat=iostat) bestandsnaam if (iostat /= 0) exit write(eenheid, '(a)') '## Bestand: '//trim(bestandsnaam) write(eenheid, '(a)') '' ! Analyseer elk bestand open(newunit=11, file=trim(bestandsnaam), status='old') do read(11, '(a)', iostat=iostat) regel if (iostat /= 0) exit ! Detecteer functie/subroutine declaraties if (index(regel, 'function') > 0 .or. index(regel, 'subroutine') > 0) then in_functie = .true. functienaam = extract_naam(regel) beschrijving = '' write(eenheid, '(a)') '### '//trim(functienaam) write(eenheid, '(a)') '**Type:** '//trim(extract_type(regel)) endif ! Zoek naar commentaar voor beschrijving if (in_functie .and. index(regel, '!') > 0) then beschrijving = trim(beschrijving)//' '//trim(regel(index(regel, '!')+1:)) endif ! Detecteer input/output variabelen if (in_functie .and. (index(regel, 'intent(in)') > 0 .or. & index(regel, 'intent(out)') > 0 .or. & index(regel, 'intent(inout)') > 0)) then write(eenheid, '(a)') '- '//trim(extract_variabele(regel))//& ' ('//trim(extract_intent(regel))//')' endif ! Einde functie detectie if (in_functie .and. index(regel, 'end') > 0 .and. & (index(regel, 'function') > 0 .or. index(regel, 'subroutine') > 0)) then write(eenheid, '(a)') '**Beschrijving:** '//trim(beschrijving) write(eenheid, '(a)') '' in_functie = .false. endif end do close(11) end do close(10) close(eenheid) print *, 'Documentatie gegenereerd: THERMISCHE_ANALYSE_DOC.md' contains function extract_naam(regel) result(naam) character(len=*), intent(in) :: regel character(len=100) :: naam integer :: start, einde start = index(regel, 'function') if (start == 0) start = index(regel, 'subroutine') start = start + 9 ! Skip "function " of "subroutine " einde = index(regel(start:), '(') + start - 2 if (einde < start) einde = len_trim(regel) naam = regel(start:einde) end function extract_naam function extract_type(regel) result(type_str) character(len=*), intent(in) :: regel character(len=20) :: type_str if (index(regel, 'function') > 0) then type_str = 'Functie' else type_str = 'Subroutine' endif end function extract_type function extract_intent(regel) result(intent_str) character(len=*), intent(in) :: regel character(len=10) :: intent_str if (index(regel, 'intent(in)') > 0) then intent_str = 'Input' else if (index(regel, 'intent(out)') > 0) then intent_str = 'Output' else intent_str = 'Input/Output' endif end function extract_intent function extract_variabele(regel) result(var_str) character(len=*), intent(in) :: regel character(len=50) :: var_str integer :: start, einde start = index(regel, '::') + 2 einde = index(regel(start:), ',') if (einde == 0) einde = len_trim(regel) var_str = adjustl(regel(start:start+einde-2)) end function extract_variabele end program auto_documentatie ``` ## Integratie in ontwikkelworkflow: ### 1. Makefile integratie: ```makefile doc: gfortran auto_doc.f90 -o auto_doc ./auto_doc echo "Documentatie bijgewerkt: $(date)" >> doc_log.txt ``` ### 2. Git pre-commit hook: Maak een bestand `.git/hooks/pre-commit`: ```bash #!/bin/bash gfortran auto_doc.f90 -o auto_doc ./auto_doc git add THERMISCHE_ANALYSE_DOC.md ``` ### 3. CI/CD pipeline (bijv. GitHub Actions): ```yaml name: Generate Documentation on: [push, pull_request] jobs: documentatie: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Genereer documentatie run: | sudo apt-get install gfortran gfortran auto_doc.f90 -o auto_doc ./auto_doc - name: Upload documentatie uses: actions/upload-artifact@v2 with: name: documentation path: THERMISCHE_ANALYSE_DOC.md ``` ## Tips voor automatisering: ### 1. Commentaar conventies: Gebruik gestructureerde commentaar: ```fortran ! TEMPERATUUR_BEREKENING: Bereken temperatuurverdeling ! Input: temp_ini - initiële temperatuur [K] ! dt - tijdstap [s] ! Output: temp_new - nieuwe temperatuur [K] ! Auteur: Jan Jansen ! Datum: 2024-01-15 ``` ### 2. Automatische scheduling: ```bash # Voeg toe aan crontab (elke dag om 02:00) 0 2 * * * /pad/naar/auto_doc >> /var/log/doc_update.log ``` ### 3. Real-time monitoring: ```bash # Watch voor bestandswijzigingen inotifywait -m -e modify *.f90 | while read; do ./auto_doc done ``` ### 4. Documentatie kwaliteitscontrole: ```fortran ! Controleer op ontbrekende documentatie if (len_trim(beschrijving) == 0) then print *, 'WAARSCHUWING: Geen beschrijving voor '//trim(functienaam) endif ``` ## Aanbevolen verbeteringen: 1. **Metadata extractie**: Voeg ondersteuning toe voor auteur, datum, versie 2. **Dependency tracking**: Documenteer functie-afhankelijkheden 3. **Template systeem**: Maak aanpasbare output templates 4. **Cross-referencing**: Genereer links tussen gerelateerde functies Dit programma genereert consistente documentatie en kan eenvoudig worden geïntegreerd in uw bestaande workflow!