From fccc53ec1c42749df6b79e3c838b5c185202c5cc Mon Sep 17 00:00:00 2001
From: rschoene <rene.schoene@tu-dresden.de>
Date: Mon, 9 Jan 2023 12:19:36 +0100
Subject: [PATCH] change project-short-name to grammar-name plus minor changes

- add pre-hook to check validity of repo-name
- fix minor errors in build.gradle, add variable for genDir
---
 README.md                                     |  2 +-
 cookiecutter.json                             |  2 +-
 hooks/pre_gen_project.py                      | 14 ++++++++---
 {{cookiecutter.repo_name}}/build.gradle       | 24 ++++++++-----------
 .../pages/docs/index.md                       |  2 +-
 ...t => {{cookiecutter.grammar_name}}.relast} |  2 +-
 .../st/{{cookiecutter.repo_name}}/Main.java   |  2 +-
 ...=> {{cookiecutter.grammar_name}}Test.java} |  2 +-
 8 files changed, 27 insertions(+), 23 deletions(-)
 rename {{cookiecutter.repo_name}}/src/main/jastadd/{{{cookiecutter.project_short_name}}.relast => {{cookiecutter.grammar_name}}.relast} (69%)
 rename {{cookiecutter.repo_name}}/src/test/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/{{{cookiecutter.project_short_name}}Test.java => {{cookiecutter.grammar_name}}Test.java} (83%)

diff --git a/README.md b/README.md
index 7bc94a3..7cf427e 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@ Usage:
 |---|---|---|---|
 | `repo_name` |  `"test_repo"` | Name used in the URL of the project | Initialize `project_url`, `repo_url`, Generated project directory, last part of the Java package, prefix of version file, name of the published artifact |
 | `project_name` |  `"My New Relational RAG Project"` | (Long) name of the project | Title in README, pages |
-| `project_short_name` |  `"NewRelAST"` | (Short) name of the project | Name of the grammar, partly name of the test |
+| `grammar_name` |  `"MyNewRelationalRAGProject"` | Name of the grammar (initialized from project name) | Name of the grammar, partly name of the test |
 | `namespace` |  `"jastadd"` | Namespace of the gitlab repository | Namespace used in the URL of the project |
 | `project_url` |  `"git@git-st.inf.tu-dresden.de:{{cookiecutter.namespace}}/{{cookiecutter.repo_name}}.git"` | (pre-computed) URL to clone the project using SSH | Setting git `origin` remote |
 | `repo_url` |  `"https://git-st.inf.tu-dresden.de/{{cookiecutter.namespace}}/{{cookiecutter.repo_name}}"` | (pre-computed) URL of the project | Back-link to repository in pages |
diff --git a/cookiecutter.json b/cookiecutter.json
index 0978cf1..fbb8138 100644
--- a/cookiecutter.json
+++ b/cookiecutter.json
@@ -2,7 +2,7 @@
   "README of": "Cookiecutter template for relational RAG projects]\nPlease refer to <https://git-st.inf.tu-dresden.de/jastadd/project-templates/relast> for information on the parameters to follow\n[Continue with Enter",
   "repo_name": "test_repo",
   "project_name": "My New Relational RAG Project",
-  "project_short_name": "NewRelAST",
+  "grammar_name": "{{ cookiecutter.project_name.replace(' ', '') }}",
   "namespace": "jastadd",
   "project_url": "git@git-st.inf.tu-dresden.de:{{cookiecutter.namespace}}/{{cookiecutter.repo_name}}.git",
   "repo_url": "https://git-st.inf.tu-dresden.de/{{cookiecutter.namespace}}/{{cookiecutter.repo_name}}",
diff --git a/hooks/pre_gen_project.py b/hooks/pre_gen_project.py
index faafdaf..e17e66c 100644
--- a/hooks/pre_gen_project.py
+++ b/hooks/pre_gen_project.py
@@ -1,11 +1,19 @@
+import re
 import sys
 
-project_short_name = '{{cookiecutter.project_short_name}}'
+MODULE_REGEX = r'^[_a-zA-Z][_a-zA-Z0-9]+$'
+
+repo_name = '{{cookiecutter.repo_name}}'
+grammar_name = '{{cookiecutter.grammar_name}}'
 
 
 def main():
-    if not project_short_name.isalnum():
-        print('project_short_name "' + project_short_name + '" must be a single word. Exiting.')
+    if not re.match(MODULE_REGEX, repo_name):
+        print('Error: repo_name "%s" is not a valid URL and Java package name' % repo_name)
+        sys.exit(1)
+
+    if not grammar_name.isalnum():
+        print('Error: grammar_name "%s" must be a single word. Exiting.' % grammar_name)
         sys.exit(1)
 
 
diff --git a/{{cookiecutter.repo_name}}/build.gradle b/{{cookiecutter.repo_name}}/build.gradle
index 5be04cb..d7c3211 100644
--- a/{{cookiecutter.repo_name}}/build.gradle
+++ b/{{cookiecutter.repo_name}}/build.gradle
@@ -28,19 +28,22 @@ dependencies {
     // implementation group: 'de.tudresden.inf.st', name: 'dumpAst', version: "${dumpAst_version}"
     grammar2uml group: 'de.tudresden.inf.st', name: 'grammar2uml', version: "${grammar2uml_version}"
     relast group: 'org.jastadd', name: 'relast', version: "${relast_version}"
+    jastadd2 group: 'org.jastadd', name: 'jastadd2', version: "${jastadd_version}"
+
     testImplementation group: 'org.assertj', name: 'assertj-core', version: "${assertj_version}"
     testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: "${jupyter_version}"
     testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: "${jupyter_version}"
 }
 
 // --- Preprocessors ---
-File genSrc = file("src/gen/java")
+def genDir = './src/gen/jastadd'
+File genSrc = file("${genDir}")
 idea.module.generatedSourceDirs += genSrc
 sourceSets.main.java.srcDir genSrc
 
-def relastFiles = ['./src/main/jastadd/{{cookiecutter.project_short_name}}.relast']
-def grammarPrefix = './src/gen/jastadd/{{cookiecutter.project_short_name}}'
-def grammarDiagramFile = './src/gen/resources/{{cookiecutter.project_short_name}}Grammar.png'
+def relastFiles = ['./src/main/jastadd/{{cookiecutter.grammar_name}}.relast']
+def grammarPrefix = "${genDir}/{{cookiecutter.grammar_name}}"
+def grammarDiagramFile = './src/gen/resources/{{cookiecutter.grammar_name}}Grammar.png'
 def jastAddListName = 'JastAddList'
 
 task generateGrammarDiagrams(type: JavaExec) {
@@ -64,7 +67,7 @@ task relastToJastAdd(type: JavaExec) {
     mainClass = 'org.jastadd.relast.compiler.Compiler'
 
     doFirst {
-        mkdir "src/gen/jastadd/"
+        mkdir "${genDir}"
     }
 
     args "--grammarName=${grammarPrefix}",
@@ -84,13 +87,6 @@ jastadd {
     modules {
         //noinspection GroovyAssignabilityCheck
         module('relast-module') {
-
-            java {
-                basedir 'src/'
-                include 'main/**/*.java'
-                include 'gen/**/*.java'
-            }
-
             jastadd {
                 basedir 'src/'
                 include 'main/jastadd/**/*.ast'
@@ -119,7 +115,7 @@ jastadd {
     }
 
     // TODO uncomment of parser is used
-    // parser.name = '{{cookiecutter.project_short_name}}Parser'
+    // parser.name = '{{cookiecutter.grammar_name}}Parser'
     // scanner.genDir = 'src/gen/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/scanner'
     // parser.genDir = 'src/gen/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/parser'
 
@@ -148,7 +144,7 @@ ext {
 }
 
 jar.manifest {
-    attributes 'Main-Class': '${mainClassName}'
+    attributes 'Main-Class': "${mainClassName}"
 }
 
 task fatJar(type: Jar) {
diff --git a/{{cookiecutter.repo_name}}/pages/docs/index.md b/{{cookiecutter.repo_name}}/pages/docs/index.md
index 824fea1..a3c1d9e 100644
--- a/{{cookiecutter.repo_name}}/pages/docs/index.md
+++ b/{{cookiecutter.repo_name}}/pages/docs/index.md
@@ -4,5 +4,5 @@
 
 ## The Grammar
 
-![](diagrams/{{cookiecutter.project_short_name}}Grammar.png)
+![](diagrams/{{cookiecutter.grammar_name}}Grammar.png)
 
diff --git a/{{cookiecutter.repo_name}}/src/main/jastadd/{{cookiecutter.project_short_name}}.relast b/{{cookiecutter.repo_name}}/src/main/jastadd/{{cookiecutter.grammar_name}}.relast
similarity index 69%
rename from {{cookiecutter.repo_name}}/src/main/jastadd/{{cookiecutter.project_short_name}}.relast
rename to {{cookiecutter.repo_name}}/src/main/jastadd/{{cookiecutter.grammar_name}}.relast
index 659992a..d46a5f1 100644
--- a/{{cookiecutter.repo_name}}/src/main/jastadd/{{cookiecutter.project_short_name}}.relast
+++ b/{{cookiecutter.repo_name}}/src/main/jastadd/{{cookiecutter.grammar_name}}.relast
@@ -1,4 +1,4 @@
-// Grammar for {{cookiecutter.project_short_name}}
+// Grammar for {{cookiecutter.grammar_name}}
 
 // TODO replace with own grammar
 Root ::= A B* [myC:C];
diff --git a/{{cookiecutter.repo_name}}/src/main/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/Main.java b/{{cookiecutter.repo_name}}/src/main/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/Main.java
index fdce0c0..da76b96 100644
--- a/{{cookiecutter.repo_name}}/src/main/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/Main.java
+++ b/{{cookiecutter.repo_name}}/src/main/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/Main.java
@@ -6,7 +6,7 @@ public class Main {
 
   public static void main(String[] args) {
     // TODO put code here
-    System.out.println("Running {{cookiecutter.project_short_name}}");
+    System.out.println("Running {{cookiecutter.project_name}}");
   }
 
 }
diff --git a/{{cookiecutter.repo_name}}/src/test/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/{{cookiecutter.project_short_name}}Test.java b/{{cookiecutter.repo_name}}/src/test/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/{{cookiecutter.grammar_name}}Test.java
similarity index 83%
rename from {{cookiecutter.repo_name}}/src/test/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/{{cookiecutter.project_short_name}}Test.java
rename to {{cookiecutter.repo_name}}/src/test/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/{{cookiecutter.grammar_name}}Test.java
index 590a0bc..6c83b0f 100644
--- a/{{cookiecutter.repo_name}}/src/test/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/{{cookiecutter.project_short_name}}Test.java
+++ b/{{cookiecutter.repo_name}}/src/test/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/{{cookiecutter.grammar_name}}Test.java
@@ -5,7 +5,7 @@ import de.tudresden.inf.st.{{cookiecutter.repo_name}}.ast.*;
 import org.junit.jupiter.api.Test;
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class {{cookiecutter.project_short_name}}Test {
+public class {{cookiecutter.grammar_name}}Test {
 
   @Test
   void test() {
-- 
GitLab