#!/usr/bin/env python3
"""Add Java, TypeScript, PHP, Ruby, Swift, Kotlin, C#, Bash, SQL, system design."""
import json, os, random
from pathlib import Path
BASE = Path(__file__).parent.parent / "data" / "processed"
E = ["user", "product", "order", "payment", "session", "token", "config", "cache",
"log", "event", "task", "job", "queue", "worker", "service", "client"]
def g(lang, issue, bad, good):
return {"messages": [{"role": "user", "content": f"Review this {lang} code:\n\n```{lang}\n{bad}\n```"},
{"role": "assistant", "content": f"**Issue: {issue}**\n\n**Fix:**\n```{lang}\n{good}\n```"}],
"source": "fullstack", "tags": [lang, issue.lower().replace(" ", "_")]}
entries = []
# JAVA (100)
entries += [g("java", i, b, f) for i, b, f in [
("Raw Type", "List list = new ArrayList();", "List<String> list = new ArrayList<>();"),
("Exception Swallow", "try { conn.close(); } catch (SQLException e) {}", "try { conn.close(); } catch (SQLException e) { log.error(\"Close failed\", e); }"),
("String Equals", "if (str == \"value\") {}", "if (\"value\".equals(str)) {}"),
("Null Check", "if (obj != null) return obj.getValue();", "return Optional.ofNullable(obj).map(Object::getValue).orElse(null);"),
("Resource Leak", "FileInputStream f = new FileInputStream(p);\nbyte[] d = f.readAllBytes();", "try (FileInputStream f = new FileInputStream(p)) { byte[] d = f.readAllBytes(); }"),
("Thread Unsafe", "class C { int n; void inc() { n++; } }", "class C { AtomicInteger n = new AtomicInteger(); void inc() { n.incrementAndGet(); } }"),
("Hardcoded Path", "File f = new File(\"/tmp/data.txt\");", "Path p = Paths.get(System.getProperty(\"user.home\"), \"data.txt\");"),
("Deprecated Date", "Date d = new Date(y, m, day);", "LocalDate d = LocalDate.of(y, m, day);"),
("Equals No HashCode", "class U { boolean equals(Object o){} }", "// Override hashCode() with equals()"),
("Finalize", "protected void finalize(){/*cleanup*/}", "// Use try-with-resources"),
("ConcurrentModify", "for (String s : list) { list.remove(s); }", "list.removeIf(s -> cond(s));"),
("SQL Injection", "String q = \"SELECT * FROM u WHERE n='\" + n + \"'\";", "PreparedStatement ps = conn.prepareStatement(\"SELECT * FROM u WHERE n=?\");"),
("Reflection", "Class<?> c = Class.forName(n);\nObject o = c.newInstance();", "// Use DI instead"),
("SuppressWarnings", "@SuppressWarnings(\"unchecked\")\nList<String> l = (List)raw;", "// Fix root cause"),
("ToString", "System.out.println(obj);", "// Override toString()"),
("Inefficient List", "ArrayList<String> l = new ArrayList<>();", "ArrayList<String> l = new ArrayList<>(expectedSize);"),
])
for e in E:
entries += [
g("java", f"{e} Raw", f"List list = new ArrayList();", f"List<{e}> list = new ArrayList<>();"),
g("java", f"{e} Leak", f"FileInputStream {e}Fis = new FileInputStream(\"{e}.txt\");", f"try (FileInputStream {e}Fis = new FileInputStream(\"{e}.txt\")) {{}}"),
g("java", f"{e} Unsafe", f"class {e}C {{ int n; void inc(){{n++;}} }}", f"class {e}C {{ AtomicInteger n = new AtomicInteger(); void inc(){{n.incrementAndGet();}} }}"),
g("java", f"{e} Null", f"if ({e} != null) {{ return {e}.get(); }}", f"return Optional.ofNullable({e}).map({e}::get).orElse(null);"),
g("java", f"{e} SQL", f"String q = \"SELECT * FROM {e}s WHERE id='\" + id + \"'\";", f"PreparedStatement ps = conn.prepareStatement(\"SELECT * FROM {e}s WHERE id=?\");"),
g("java", f"{e} Path", f"String {e}P = \"/tmp/{e}.txt\";", f"Path {e}P = Paths.get(System.getProperty(\"user.home\"), \"{e}.txt\");"),
g("java", f"{e} Equals", f"if ({e}.n == \"admin\") {}", f"if (\"admin\".equals({e}.n)) {{}}"),
g("java", f"{e} Date", f"Date {e}D = new Date(y,m,d);", f"LocalDate {e}D = LocalDate.of(y,m,d);"),
g("java", f"{e} Modify", f"for ({e} x : {e}s) {{ {e}s.remove(x); }}", f"{e}s.removeIf(x -> cond(x));"),
g("java", f"{e} Ex", f"try {{ proc{e}(); }} catch (Exception e) {{}}", f"try {{ proc{e}(); }} catch (Exception e) {{ log.error(\"{e} failed\", e); }}"),
]
# TYPESCRIPT (80)
entries += [g("typescript", i, b, f) for i, b, f in [
("Any Type", "function p(data: any): any { return data; }", "function p<T>(data: T): T { return data; }"),
("Var", "var x = 1;", "const x = 1;"),
("Implicit Any", "function greet(name) { return name; }", "function greet(name: string): string { return name; }"),
("Non-null Assert", "const v = arr[0]!;", "const v = arr[0]; if (!v) return;"),
("Type Assert", "const s = (obj as any).name;", "const s = obj.name; // Fix types"),
("Missing Await", "const r = fetch(url);\nconst d = r.json();", "const r = await fetch(url);\nconst d = await r.json();"),
("Never Throw", "function p(s: string): number { const n = parseInt(s); if (isNaN(n)) throw e; return n; }", "function p(s: string): number | null { const n = parseInt(s); return isNaN(n) ? null : n; }"),
("Discriminated", "type A = { type: string; payload: any };", "type A = { type: 'ADD'; payload: number } | { type: 'REM'; payload: string };"),
("Optional Chain", "if (u && u.a && u.a.c) {}", "const c = u?.a?.c;"),
("Index Signature", "interface D { [key: string]: any; }", "interface D { [key: string]: string | number; }"),
])
for e in E:
entries += [
g("typescript", f"{e} Any", f"function get{e}(): any {{ return d; }}", f"function get{e}(): {e} {{ return d; }}"),
g("typescript", f"{e} Implicit", f"function proc{e}(data) {{ return data; }}", f"function proc{e}(data: {e}): {e} {{ return data; }}"),
g("typescript", f"{e} Await", f"const {e} = fetch('/api/{e}s');\nconst d = {e}.json();", f"const {e} = await fetch('/api/{e}s');\nconst d = await {e}.json();"),
g("typescript", f"{e} Assert", f"const {e} = arr[0]!;", f"const {e} = arr[0]; if (!{e}) return;"),
g("typescript", f"{e} Cast", f"const {e} = (obj as any).{e};", f"const {e} = obj.{e}; // Fix types"),
g("typescript", f"{e} Chain", f"if (o && o.{e} && o.{e}.n) {{}}", f"const n = o?.{e}?.n;"),
g("typescript", f"{e} Union", f"type {e}A = {{ type: string; data: any }};", f"type {e}A = {{ type: 'CREATE'; data: {e} }} | {{ type: 'DEL'; id: number }};"),
g("typescript", f"{e} Never", f"function find{e}(id: string): {e} {{ return db[id] || null; }}", f"function find{e}(id: string): {e} | null {{ return db[id] || null; }}"),
g("typescript", f"{e} Generic", f"function create{e}(data: any): any {{ return data; }}", f"function create{e}<T extends Partial<{e}>>(data: T): T {{ return data; }}"),
g("typescript", f"{e} Enum", f"const {e}S = {{ ACTIVE: 1, INACTIVE: 0 }};", f"enum {e}S {{ ACTIVE = 1, INACTIVE = 0 }}"),
]
# PHP (60)
entries += [g("php", i, b, f) for i, b, f in [
("SQL Injection", "\$q = \"SELECT * FROM u WHERE id='\" . \$id . \"'\";", "\$stmt = \$pdo->prepare('SELECT * FROM u WHERE id=?');"),
("XSS", "echo \$input;", "echo htmlspecialchars(\$input, ENT_QUOTES, 'UTF-8');"),
("Hardcoded Pass", "\$c = mysql_connect('h', 'r', 'p123');", "\$c = new PDO(ENV['DSN'], ENV['U'], ENV['P']);"),
("Deprecated MySQL", "\$r = mysql_query(\$q);", "// Use PDO or mysqli"),
("Loose Compare", "if (\$v == 0) {}", "if (\$v === 0) {}"),
("eval()", "eval(\$code);", "// Never eval"),
("Global", "global \$cfg;", "// Use DI"),
("Suppressed", "\$r = @file_get(\$u);", "// Handle errors properly"),
("Nullsafe", "\$c = \$u->a->c;", "\$c = \$u?->a?->c;"),
("Weak Hash", "\$h = md5(\$p);", "\$h = password_hash(\$p, PASSWORD_ARGON2ID);"),
])
for e in E:
entries += [
g("php", f"{e} SQL", f"\$q = \"SELECT * FROM {e}s WHERE id='\" . \$id . \"'\";", f"\$stmt = \$pdo->prepare('SELECT * FROM {e}s WHERE id=?');"),
g("php", f"{e} XSS", f"echo \$\{e\}_i;", f"echo htmlspecialchars(\$\{e\}_i, ENT_QUOTES, 'UTF-8');"),
g("php", f"{e} eval", f"eval(\"\$\\\{e\} = \" . \$i);", "// Never eval"),
g("php", f"{e} Hash", f"\$h = md5(\$\{e\}_p);", f"\$h = password_hash(\$\{e\}_p, PASSWORD_ARGON2ID);"),
g("php", f"{e} Loose", f"if (\$\{e\} == '0') {{}}", f"if (\$\{e\} === '0') {{}}"),
g("php", f"{e} Global", f"global \$\{e\}_c;", "// Use DI"),
g("php", f"{e} MySQL", f"\$r = mysql_query(\"SELECT * FROM {e}s\");", "// Use PDO"),
g("php", f"{e} Suppress", f"\$r = @file_get(\"\{e\}.txt\");", "// Handle errors"),
g("php", f"{e} Nullsafe", f"\$v = \$\{e\}->d->v;", f"\$v = \$\{e\}?->d?->v;"),
g("php", f"{e} Typo", f"if (\$\{e\} = true) {{}}", f"if (\$\{e\} === true) {{}}"),
]
# RUBY (50)
entries += [g("ruby", i, b, f) for i, b, f in [
("Nil Check", "if u != nil && u.n != nil {}", "if u&.n {}"),
("Eval", "eval(input)", "// Never eval"),
("SQL Injection", "U.where(\"n='#{n}'\")", "U.where(name: n)"),
("Rescue Exception", "rescue Exception => e", "rescue StandardError => e"),
("Bang", "n = n.strip!", "n&.strip!"),
("Open Redirect", "redirect_to p[:url]", "redirect_to allowed[p[:id]] || def"),
("Mass Assign", "U.new(p[:u])", "U.new(p.require(:u).permit(:name))"),
("N+1", "@ps.each { |p| puts p.cs.count }", "@ps = P.includes(:cs)"),
("Hardcoded", "S = 'secret123'", "S = ENV['SECRET_KEY']"),
("Render", "<% ps.each { |p| %> ", "<%= render partial: 'p', collection: ps %>"),
])
for e in E:
entries += [
g("ruby", f"{e} Nil", f"if {e} != nil && {e}.n != nil {{}}", f"if {e}&.n"),
g("ruby", f"{e} SQL", f"{e.capitalize}.where(\"n='{{n}}'\")", f"{e.capitalize}.where(name: n)"),
g("ruby", f"{e} N+1", f"@{e}s.each {{ |x| puts x.count }}", f"@{e}s = {e.capitalize}.includes(:r)"),
g("ruby", f"{e} Mass", f"{e.capitalize}.new(p[:{e}])", f"{e.capitalize}.new(p.require(:{e}).permit(:n))"),
g("ruby", f"{e} Rescue", f"rescue Exception => e", f"rescue {e}Error => e"),
g("ruby", f"{e} Secret", f"{e}_S = 'hard'", f"{e}_S = ENV['{e}_S']"),
g("ruby", f"{e} Bang", f"{e}_n = {e}_n.strip!", f"{e}_n&.strip!"),
g("ruby", f"{e} Render", f"<% {e}s.each {{ |x| %>", f"<%= render partial: '{e}', collection: {e}s %>"),
g("ruby", f"{e} Redirect", f"redirect_to p[:{e}_u]", f"redirect_to allowed[p[:id]]"),
g("ruby", f"{e} Eval", f"eval(p[:{e}_c])", "// Never eval"),
]
# BASH (50)
entries += [g("bash", i, b, f) for i, b, f in [
("Unquoted", "rm -rf \$D/*", "rm -rf \"\$D\"/*"),
("eval", "eval \$i", "# Never eval"),
("Hardcoded", "mysql -u r -pp123", "mysql -u \"\$U\" -p\"\$P\""),
("No Set", "#!/bin/bash\nrm /tmp/*", "#!/usr/bin/env bash\nset -euo pipefail"),
("Curl Timeout", "curl http://x.com", "curl --max-time 10 --fail http://x.com"),
("Backtick", "r=`cmd`", "r=\$(cmd)"),
("Test Eq", "[ \$s -eq \"y\" ]", "[[ \$s == \"y\" ]]"),
("For LS", "for f in \$(ls *.txt); do", "for f in *.txt; do"),
("Echo -e", "echo -e \"\\n\"", "printf '\\n'"),
("No Trap", "t=\$(mktemp)\n# no cleanup", "t=\$(mktemp)\ntrap 'rm -f \"\$t\"' EXIT"),
])
for e in E:
entries += [
g("bash", f"{e} Quote", f"cp \$\{e\}_F d", f"cp \"\$\{e\}_F\" d"),
g("bash", f"{e} Pass", f"export {e}_P='hard'", f"export {e}_P=\"\${e}_P_ENV\""),
g("bash", f"{e} Set", f"#!/bin/bash\nproc_{e}()", f"#!/usr/bin/env bash\nset -euo pipefail\nproc_{e}()"),
g("bash", f"{e} Curl", f"curl http://api/{e}s", f"curl --max-time 10 --fail http://api/{e}s"),
g("bash", f"{e} Backtick", f"\{e\}_r=`cat /tmp/{e}`", f"\{e\}_r=\$(cat /tmp/{e})"),
g("bash", f"{e} LS", f"for {e} in \$(ls {e}*.txt); do", f"for {e} in {e}*.txt; do"),
g("bash", f"{e} Trap", f"t=\$(mktemp)\nproc_{e}()", f"t=\$(mktemp)\ntrap 'rm -f \"\$t\"' EXIT\nproc_{e}()"),
g("bash", f"{e} Echo", f"echo -e \"{e}: \\\\n\"", f"printf '{e}: \\\\n'"),
g("bash", f"{e} Test", f"[ \${e} -eq \"y\" ]", f"[[ \${e} == \"y\" ]]"),
g("bash", f"{e} Eval", f"eval \"\${e}_C\"", "# Never eval"),
]
# SQL (50)
entries += [g("sql", i, b, f) for i, b, f in [
("SELECT *", "SELECT * FROM users;", "SELECT id, name, email FROM users;"),
("No Index", "SELECT * FROM o WHERE uid = 1;", "CREATE INDEX idx_o_uid ON o(uid);"),
("N+1", "-- Loop:\nSELECT * FROM c WHERE pid = ?", "SELECT c.* FROM c JOIN p ON c.pid = p.id WHERE p.id IN (...);"),
("No Tx", "UPDATE a SET b=b-10 WHERE id=1;\nUPDATE a SET b=b+10 WHERE id=2;", "BEGIN;\nUPDATE a SET b=b-10 WHERE id=1;\nUPDATE a SET b=b+10 WHERE id=2;\nCOMMIT;"),
("LIKE Leading", "SELECT * FROM u WHERE n LIKE '%s%';", "-- Use full-text search"),
("Implicit Cast", "SELECT * FROM u WHERE id = '123';", "SELECT * FROM u WHERE id = 123;"),
("Func WHERE", "SELECT * FROM o WHERE YEAR(ca) = 2024;", "SELECT * FROM o WHERE ca >= '2024-01-01' AND ca < '2025-01-01';"),
("No LIMIT", "SELECT * FROM l ORDER BY ca DESC;", "SELECT * FROM l ORDER BY ca DESC LIMIT 100;"),
("UNION", "SELECT * FROM a UNION SELECT * FROM b;", "SELECT * FROM a UNION ALL SELECT * FROM b;"),
("No JOIN", "SELECT * FROM e, u WHERE e.uid = u.id;", "SELECT e.*, u.n FROM e JOIN u ON e.uid = u.id;"),
])
for e in E:
entries += [
g("sql", f"{e} SELECT *", f"SELECT * FROM {e}s;", f"SELECT id, name, ca FROM {e}s;"),
g("sql", f"{e} Index", f"SELECT * FROM {e}s WHERE uid = 1;", f"CREATE INDEX idx_{e}_uid ON {e}s(uid);"),
g("sql", f"{e} Limit", f"SELECT * FROM {e}s ORDER BY ca DESC;", f"SELECT * FROM {e}s ORDER BY ca DESC LIMIT 100;"),
g("sql", f"{e} Func", f"SELECT * FROM {e}s WHERE YEAR(ca) = 2024;", f"SELECT * FROM {e}s WHERE ca >= '2024-01-01' AND ca < '2025-01-01';"),
g("sql", f"{e} Cast", f"SELECT * FROM {e}s WHERE id = '123';", f"SELECT * FROM {e}s WHERE id = 123;"),
g("sql", f"{e} LIKE", f"SELECT * FROM {e}s WHERE n LIKE '%s%';", "-- Use full-text search"),
g("sql", f"{e} Tx", f"UPDATE {e}s SET c=c-1 WHERE id=1;", "BEGIN;\nUPDATE {e}s SET c=c-1 WHERE id=1;\nCOMMIT;"),
g("sql", f"{e} UNION", f"SELECT * FROM {e}s UNION SELECT * FROM {e}_a;", "SELECT * FROM {e}s UNION ALL SELECT * FROM {e}_a;"),
g("sql", f"{e} JOIN", f"SELECT * FROM {e}s e, u WHERE e.uid=u.id;", "SELECT e.*, u.n FROM {e}s e JOIN u ON e.uid=u.id;"),
g("sql", f"{e} Coalesce", f"SELECT n, COALESCE(email, 'none') FROM {e}s;", "-- Consider NOT NULL with default"),
]
# SYSTEM DESIGN (50)
entries += [g("markdown", i, b, f) for i, b, f in [
("REST Naming", "GET /api/getUsers\nPOST /api/createUser", "GET /api/users\nPOST /api/users"),
("Pagination", "GET /api/users", "GET /api/users?page=1&per_page=20"),
("Rate Limit", "# No rate limit", "# Add: 100 req/min per user"),
("Sync API", "# Blocking DB in handler", "# Use async/background job"),
("Idempotency", "POST /api/payments", "POST /api/payments\nIdempotency-Key: uuid"),
("Version", "GET /api/users", "GET /api/v1/users"),
("Auth", "# Public sensitive endpoint", "# Add: @requires_auth"),
("CORS", "# No CORS headers", "# Set Access-Control-Allow-Origin"),
("Timeout", "# No timeout", "# timeout: 5s"),
("Retry", "# No retry", "# Exponential backoff with jitter"),
])
for e in E:
entries += [
g("markdown", f"{e} REST", f"GET /api/get{e}s\nPOST /api/create{e}", f"GET /api/{e}s\nPOST /api/{e}s"),
g("markdown", f"{e} Page", f"GET /api/{e}s", f"GET /api/{e}s?page=1&per_page=20"),
g("markdown", f"{e} Rate", f"# {e} API no limit", f"# {e} limit: 100 req/min"),
g("markdown", f"{e} Idem", f"POST /api/{e}s", f"POST /api/{e}s\nIdempotency-Key: uuid"),
g("markdown", f"{e} Ver", f"GET /api/{e}s", f"GET /api/v1/{e}s"),
g("markdown", f"{e} Auth", f"# Public {e} endpoint", f"# {e}: @requires_auth"),
g("markdown", f"{e} CORS", f"# {e} no CORS", f"# {e}: set CORS headers"),
g("markdown", f"{e} Timeout", f"# {e} no timeout", f"# {e}: timeout 5s"),
g("markdown", f"{e} Retry", f"# No {e} retry", f"# {e}: exponential backoff"),
g("markdown", f"{e} Error", f"// {e} err: {{ error: 'bad' }}", f"// {e} err: {{ error: {{ code: 'VALIDATION', details: [] }} }}"),
]
# Shuffle and save
random.shuffle(entries)
out = BASE / "dev_finetuning_languages.json"
os.makedirs(out.parent, exist_ok=True)
with open(out, 'w') as f:
json.dump(entries, f, indent=2)
print(f"Total: {len(entries)} entries")
print(f"Languages: {sorted(set(t for e in entries for t in e['tags'] if t != 'fullstack'))}")
print(f"Saved: {out}")