Skip to content

Commit

Permalink
Small rules refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
kniazkov committed Dec 8, 2023
1 parent d66cdfd commit bfd0706
Show file tree
Hide file tree
Showing 43 changed files with 151 additions and 100 deletions.
2 changes: 1 addition & 1 deletion LICENSE.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
The MIT License (MIT)

Copyright (c) 2022 Ivan Kniazkov
Copyright (c) 2023 Ivan Kniazkov

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
9 changes: 5 additions & 4 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<!--
The MIT License (MIT)
Copyright (c) 2022 Ivan Kniazkov
Copyright (c) 2023 Ivan Kniazkov
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down Expand Up @@ -149,12 +149,13 @@ SOFTWARE.
<plugin>
<groupId>org.cqfn</groupId>
<artifactId>astranaut-maven-plugin</artifactId>
<version>0.1.10</version>
<version>0.1.15</version>
<configuration>
<dsl>${basedir}/src/main/dsl/rules.dsl</dsl>
<dsl>${basedir}/src/main/dsl/uast.dsl</dsl>
<output>${basedir}/src/main/java</output>
<version>0.1</version>
<pkg>org.cqfn.uast.tree</pkg>
<dbginfo>true</dbginfo>
</configuration>
<executions>
<execution>
Expand All @@ -170,7 +171,7 @@ SOFTWARE.
<dependency>
<groupId>org.cqfn</groupId>
<artifactId>astranaut-core</artifactId>
<version>1.0.5</version>
<version>1.0.6</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
Expand Down
160 changes: 105 additions & 55 deletions src/main/dsl/rules.dsl → src/main/dsl/uast.dsl
Original file line number Diff line number Diff line change
@@ -1,31 +1,107 @@
/*
The MIT License (MIT)
Copyright (c) 2023 Ivan Kniazkov
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

/*
I. Unified AST description
1. Literals
*/

IntegerLiteral <- $int$, $String.valueOf(#)$, $Integer.parseInt(#)$, $NumberFormatException$;
Identifier <- $String$, $#$, $#$;
StringLiteral <- $String$, $#$, $#$;
Modifier <- $String$, $#$, $#$;
PrimitiveType <- $String$, $#$, $#$;

Name <- [composition@Name], last@Identifier;

/*
2. Program structure
*/

Program <- {ProgramItem};
ProgramItem <- ClassDeclaration | Statement | ClassItem;
ClassDeclaration <- [modifiers@ModifierBlock], name@Identifier, [extendsbl@ExtendsBlock], [implementsbl@ImplementsBlock], body@ClassBody;
ModifierBlock <- {Modifier};
Parameter <- [modifiers@ModifierBlock], [datatype@TypeName], name@Identifier;
ParameterBlock <- {Parameter};
ExtendsBlock <- {ClassType};
ImplementsBlock <- {ClassType};
ThrowsBlock <- {Exception};
ClassBody <- {ClassItem};
ClassItem <- FunctionDeclaration | FieldDeclaration;
FunctionDeclaration <- [modifiers@ModifierBlock], [datatype@TypeName], name@Identifier, parameters@ParameterBlock, [throwsbl@ThrowsBlock], body@StatementBlock;
FieldDeclaration <- [modifiers@ModifierBlock], [datatype@TypeName], declarators@DeclaratorList;
DeclaratorList <- {Declarator};
Declarator <- name@Identifier, [value@Expression];
Exception <- name@ClassType;

/*
3. Data types
*/

TypeName <- ArrayType | PrimitiveType | ClassType | VoidType;
ArrayType <- base@TypeName, dimensions@DimensionList;
ClassType <- name@Name;
VoidType <- 0;
DimensionList <- {Dimension};
Dimension <- [expression@Expression];

/*
4. Statements
*/

Statement <- Return | StatementBlock | VariableDeclaration | ExpressionStatement | IfElse;
Return <- [expression@Expression];
StatementBlock <- {Statement};
VariableDeclaration <- [modifiers@ModifierBlock], [datatype@TypeName], declarators@DeclaratorList;
ExpressionStatement <- expression@Expression;
IfElse <- condition@Expression, ifBranch@Statement, [elseBranch@Statement];

/*
5. Expressions
*/

ExpressionList <- {Expression};
Expression <- BinaryExpression | IntegerLiteral | This | StringLiteral | Identifier | NullLiteral
| FunctionCall | UnaryExpression | BitwiseExpression | LogicalExpression | AssignableExpression | Assignment
| ParenthesizedExpression | ObjectCreationExpression | ArrayInitializer;
ArithmeticExpression <- Addition | Subtraction | Multiplication | Division | Modulus;
BinaryExpression <- ArithmeticExpression | RelationalExpression;
RelationalExpression <- IsEqualTo | NotEqualTo | GreaterThan | LessThan | GreaterThanOrEqualTo | LessThanOrEqualTo;
Statement <- Return | StatementBlock | VariableDeclaration | ExpressionStatement | IfElse;
TypeName <- ArrayType | PrimitiveType | ClassType | VoidType;
UnaryExpression <- PreIncrement | PreDecrement | PostIncrement | PostDecrement | Positive | Negative;
BitwiseExpression <- BitwiseComplement | LeftShift | RightShift | UnsignedRightShift | BitwiseAnd | BitwiseOr | ExclusiveOr;
LogicalExpression <- LogicalAnd | LogicalOr | LogicalNot;
Assignment <- SimpleAssignment | AdditionAssignment | SubtractionAssignment | MultiplicationAssignment
| DivisionAssignment | ModulusAssignment | BitwiseAndAssignment | BitwiseOrAssignment | ExclusiveOrAssignment
| RightShiftAssignment | UnsignedRightShiftAssignment | LeftShiftAssignment;
AssignableExpression <- Variable | PropertyAccess;

ExpressionStatement <- expression@Expression;
ParenthesizedExpression <- expression@Expression;

This <- 0;
NullLiteral <- 0;

Addition <- left@Expression, right@Expression;
Subtraction <- left@Expression, right@Expression;
Multiplication <- left@Expression, right@Expression;
Expand Down Expand Up @@ -71,46 +147,28 @@ UnsignedRightShiftAssignment <- left@AssignableExpression, right@Expression;
RightShiftAssignment <- left@AssignableExpression, right@Expression;
LeftShiftAssignment <- left@AssignableExpression, right@Expression;

ClassType <- name@Name;
ArrayType <- base@TypeName, dimensions@DimensionList;
DimensionList <- {Dimension};
Dimension <- [expression@Expression];
Return <- [expression@Expression];
IfElse <- condition@Expression, ifbranch@Statement, [elsebranch@Statement];
Name <- [composition@Name], last@Identifier;
Variable <- Name;
StatementBlock <- {Statement};
This <- 0;
VoidType <- 0;
NullLiteral <- 0;
PropertyAccess <- left@Expression, right@Expression;
ModifierBlock <- {Modifier};
ExpressionList <- {Expression};
ArrayInitializer <- {Expression};
FunctionCall <- [owner@Name], name@Identifier, arguments@ExpressionList;
Parameter <- [modifiers@ModifierBlock], [datatype@TypeName], name@Identifier;
FunctionDeclaration <- [modifiers@ModifierBlock], [datatype@TypeName], name@Identifier, parameters@ParameterBlock, [throwsbl@ThrowsBlock], body@StatementBlock;
ParameterBlock <- {Parameter};
ClassDeclaration <- [modifiers@ModifierBlock], name@Identifier, [extendsbl@ExtendsBlock], [implementsbl@ImplementsBlock], body@ClassBody;
ExtendsBlock <- {ClassType};
ImplementsBlock <- {ClassType};
ThrowsBlock <- {Exception};
ClassBody <- {ClassItem};
ClassItem <- FunctionDeclaration | FieldDeclaration;
FieldDeclaration <- [modifiers@ModifierBlock], [datatype@TypeName], declarators@DeclaratorList;
VariableDeclaration <- [modifiers@ModifierBlock], [datatype@TypeName], declarators@DeclaratorList;
DeclaratorList <- {Declarator};
Declarator <- name@Identifier, [value@Expression];
Exception <- name@ClassType;
ObjectCreationExpression <- datatype@TypeName, [arguments@ExpressionList];
PropertyAccess <- left@Expression, right@Expression;
ArrayInitializer <- {Expression};

/*
II. Java
1. Red nodes
*/

java:

Synchronized <- expression@Expression, body@StatementBlock;
Statement <- & | Synchronized;

IntegerLiteralExpr<#1> -> IntegerLiteral<#1>;
/*
2. Transformation rules
*/

IntegerLiteralExpr<#1> -> IntegerLiteral<#1>;

EnclosedExpr(#1) -> ParenthesizedExpression(#1);

Expand Down Expand Up @@ -275,17 +333,11 @@ Modifier<#1> -> Modifier<#1>;
NullLiteralExpr -> NullLiteral;
IfStmt(#1, #2) -> IfElse(#1, #2);

// Arrays

ArrayType(#1) -> ArrayType(#1, DimensionList(Dimension));
ArrayInitializerExpr(#1...) -> ArrayInitializer(#1);

//

CompilationUnit(#1) -> Program(#1);

// Class declaration ClassDeclaration <- [ModifierBlock], Identifier, [ExtendsBlock], [ImplementsBlock], ClassBody;

ClassOrInterfaceDeclaration(Modifier#1, #2, InterfaceType(#3)) ->
ClassDeclaration(ModifierBlock(#1), #2, ImplementsBlock(ClassType(Name(#3))), ClassBody);

Expand All @@ -297,8 +349,6 @@ ClassOrInterfaceDeclaration(Modifier#1, #2, #3...) ->

ClassOrInterfaceDeclaration(#1, #2...) -> ClassDeclaration(#1, ClassBody(#2));

// Field and variable declaration

ObjectCreationExpr(#1) -> ObjectCreationExpression(#1);
ObjectCreationExpr(#1, #2...) -> ObjectCreationExpression(#1, ExpressionList(#2));

Expand All @@ -314,8 +364,6 @@ VariableDeclarationExpr(VariableDeclarator(#1, #2, #3)) -> VariableDeclaration(#
VariableDeclarationExpr(Modifier#3, VariableDeclarator(#1, #2)) -> VariableDeclaration(ModifierBlock(#3), #1, DeclaratorList(Declarator(#2)));
VariableDeclarationExpr(Modifier#4, VariableDeclarator(#1, #2, #3)) -> VariableDeclaration(ModifierBlock(#4), #1, DeclaratorList(Declarator(#2, #3)));

// Function declaration FunctionDeclaration <- [modifiers@ModifierBlock], [typename@TypeName], name@Identifier, parameters@ParameterBlock, body@StatementBlock;

MethodDeclaration(Modifier#1, #2, Parameter#3, #4, #5) ->
FunctionDeclaration(ModifierBlock(#1), #4, #2, ParameterBlock(#3), #5);
MethodDeclaration(Modifier#1, #2, Parameter#3, Exception#6, #4, #5) ->
Expand All @@ -324,18 +372,24 @@ MethodDeclaration(Modifier#1, #2, Parameter#3, Exception#6, #4, #5) ->
ConstructorDeclaration(Modifier#1, #2, Parameter#3, #4) ->
FunctionDeclaration(ModifierBlock(#1), #2, ParameterBlock(#3), #4);

/*
III. JavaScript
1. Red nodes
*/

js:

ClassItem <- & | Property;
Expression <- & | ObjectLiteral;
ObjectLiteral <- {Property};
// PropertyList <- {Property};
//ObjectLiteral <- 0;
Property <- name@Identifier, value@Expression;
Yield <- Expression;

// ObjectCreationExpr(#1, #2...) -> ObjectCreationExpression(#1, ExpressionList(#2));
// ObjectCreationExpression <- datatype@TypeName, [arguments@ExpressionList];
/*
2. Transformation rules
*/

propertyAssignment(propertyName(identifierName(#1)), #2) -> Property(#1, #2);
objectLiteral(#1...) -> ObjectLiteral(#1);
singleExpression(literal<"new">, Variable(#1), arguments(#2...)) ->
Expand Down Expand Up @@ -470,7 +524,6 @@ singleExpression(#1, literal<"--">) -> PostDecrement(#1);
singleExpression(literal<"-">, #1) -> Negative(#1);
singleExpression(literal<"+">, #1) -> Positive(#1);


identifier(literal<#1>) -> Identifier<#1>;

singleExpression(#1, literal<"=">, #2) -> SimpleAssignment(#1, #2);
Expand Down Expand Up @@ -517,8 +570,6 @@ program(sourceElements(#1...)) -> Program(#1);

returnStatement(literal<"return">, expressionSequence(#1)) -> Return(#1);

// Class declaration ClassDeclaration <- [ModifierBlock], Identifier, [ExtendsBlock], [ImplementsBlock], ClassBody;

classDeclaration(literal<"class">, #1, classTail(literal<"extends">, Variable(#2)))
-> ClassDeclaration(#1, ExtendsBlock(ClassType(#2)), ClassBody);
classDeclaration(literal<"class">, #1, classTail(#2, classElement(emptyStatement_)))
Expand All @@ -528,8 +579,6 @@ classDeclaration(literal<"class">, #1, classTail(#2...)) -> ClassDeclaration(#1,
classElement(propertyName(identifierName(#1)), literal<"=">, #2) -> Property(#1, #2);
classElement(#1) -> #1;

// Function declaration FunctionDeclaration <- [modifiers@ModifierBlock], [typename@TypeName], name@Identifier, parameters@ParameterBlock, body@StatementBlock;

functionBody(sourceElements(sourceElement(statement(expressionStatement(expressionSequence(#1)))))) ->
StatementBlock(#1);
functionBody(sourceElements(sourceElement(statement(#1)))) ->
Expand All @@ -547,6 +596,9 @@ methodDefinition(propertyName(identifierName(#1)), #2, #3) -> FunctionDeclarati
formalParameterArg(assignable(#1)) -> Parameter(#1);
formalParameterList(#1...) -> ParameterBlock(#1);

/*
IV. Python
*/

python:

Expand Down Expand Up @@ -656,8 +708,6 @@ file_input(#1, small_stmt(#2)) -> Program(#1, #2);

file_input(#1...) -> Program(#1);

// Class declaration ClassDeclaration <- [ModifierBlock], Identifier, [ExtendsBlock], [ImplementsBlock], ClassBody;

classdef(literal<"class">, name(literal<#1>), suite(small_stmt(literal<"pass">)))
-> ClassDeclaration(Identifier<#1>, ClassBody);

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/cqfn/uast/Main.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2022 Ivan Kniazkov
* Copyright (c) 2023 Ivan Kniazkov
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/cqfn/uast/algorithms/Algorithm.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2022 Ivan Kniazkov
* Copyright (c) 2023 Ivan Kniazkov
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/cqfn/uast/algorithms/Carrying.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2022 Ivan Kniazkov
* Copyright (c) 2023 Ivan Kniazkov
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/cqfn/uast/algorithms/Greening.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2022 Ivan Kniazkov
* Copyright (c) 2023 Ivan Kniazkov
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/cqfn/uast/algorithms/package-info.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2022 Ivan Kniazkov
* Copyright (c) 2023 Ivan Kniazkov
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/cqfn/uast/cli/AlgorithmConverter.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2022 Ivan Kniazkov
* Copyright (c) 2023 Ivan Kniazkov
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/cqfn/uast/cli/FileConverter.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2022 Ivan Kniazkov
* Copyright (c) 2023 Ivan Kniazkov
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/cqfn/uast/cli/ImagePathValidator.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2022 Ivan Kniazkov
* Copyright (c) 2023 Ivan Kniazkov
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down
Loading

1 comment on commit bfd0706

@0pdd
Copy link

@0pdd 0pdd commented on bfd0706 Dec 8, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn't able to retrieve PDD puzzles from the code base and submit them to github. If you think that it's a bug on our side, please submit it to yegor256/0pdd:

set -x && set -e && set -o pipefail && cd /tmp/0pdd20231208-14-3cyz5i/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA && pdd -v -f /tmp/20231208-1139492-17lox1 [1]: + set -e + set -o pipefail + cd /tmp/0pdd20231208-14-3cyz5i/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA + pdd -v -f /tmp/20231208-1139492-17lox1...

Please, copy and paste this stack trace to GitHub:

UserError
set -x && set -e && set -o pipefail && cd /tmp/0pdd20231208-14-3cyz5i/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA && pdd -v -f /tmp/20231208-1139492-17lox1 [1]:
+ set -e
+ set -o pipefail
+ cd /tmp/0pdd20231208-14-3cyz5i/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA
+ pdd -v -f /tmp/20231208-1139492-17lox1

My version is 0.23.2
Ruby version is 3.1.4 at x86_64-linux
Reading from root dir /tmp/0pdd20231208-14-3cyz5i/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA
/tmp/0pdd20231208-14-3cyz5i/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_java_raw.png is a binary file (36349 bytes)
/tmp/0pdd20231208-14-3cyz5i/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_java_unified.png is a binary file (46534 bytes)
/tmp/0pdd20231208-14-3cyz5i/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_js_raw.png is a binary file (67906 bytes)
/tmp/0pdd20231208-14-3cyz5i/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_js_unified.png is a binary file (30973 bytes)
/tmp/0pdd20231208-14-3cyz5i/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_py_raw.png is a binary file (47973 bytes)
/tmp/0pdd20231208-14-3cyz5i/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/ast_py_unified.png is a binary file (30973 bytes)
/tmp/0pdd20231208-14-3cyz5i/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/comparison.png is a binary file (115513 bytes)
/tmp/0pdd20231208-14-3cyz5i/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/project_structure.png is a binary file (28774 bytes)
/tmp/0pdd20231208-14-3cyz5i/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/main/documents/synchronized_java.png is a binary file (14938 bytes)
/tmp/0pdd20231208-14-3cyz5i/Z2l0QGdpdGh1Yi5jb206Y3Fmbi91YXN0LmdpdA/src/test/resources/algorithms/ClassWithProperty_js.json is a binary file (709 bytes)
Reading .github/workflows/build_and_test.yml ...
Reading .gitignore ...
Reading .rultor.yml ...
Reading CONTRIBUTING.md ...
Reading LICENSE.txt ...
Reading README.md ...
Reading codecov.yml ...
Reading pom.xml ...
Reading src/main/antlr/JavaScriptLexer.g4 ...
ERROR: ERROR: src/main/antlr/JavaScriptLexer.g4; PDD::Error at src/main/antlr/JavaScriptLexer.g4:227: TODO found, but puzzle can't be parsed, most probably because TODO is not followed by a puzzle marker, as this page explains: https://github.com/cqfn/pdd#how-to-format
If you can't understand the cause of this issue or you don't know how to fix it, please submit a GitHub issue, we will try to help you: https://github.com/cqfn/pdd/issues. This tool is still in its beta version and we will appreciate your feedback. Here is where you can find more documentation: https://github.com/cqfn/pdd/blob/master/README.md.
Exit code is 1

/app/objects/git_repo.rb:73:in `rescue in block in xml'
/app/objects/git_repo.rb:70:in `block in xml'
/app/vendor/ruby-3.1.4/lib/ruby/3.1.0/tempfile.rb:317:in `open'
/app/objects/git_repo.rb:69:in `xml'
/app/objects/puzzles.rb:41:in `deploy'
/app/objects/jobs/job.rb:38:in `proceed'
/app/objects/jobs/job_starred.rb:32:in `proceed'
/app/objects/jobs/job_recorded.rb:31:in `proceed'
/app/objects/jobs/job_emailed.rb:33:in `proceed'
/app/objects/jobs/job_commiterrors.rb:33:in `proceed'
/app/objects/jobs/job_detached.rb:48:in `exclusive'
/app/objects/jobs/job_detached.rb:36:in `block in proceed'
/app/objects/jobs/job_detached.rb:36:in `fork'
/app/objects/jobs/job_detached.rb:36:in `proceed'
/app/0pdd.rb:531:in `process_request'
/app/0pdd.rb:367:in `block in <top (required)>'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1706:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1706:in `block in compile!'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1019:in `block (3 levels) in route!'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1037:in `route_eval'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1019:in `block (2 levels) in route!'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1068:in `block in process_route'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1066:in `catch'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1066:in `process_route'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1017:in `block in route!'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1014:in `each'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1014:in `route!'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1138:in `block in dispatch!'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1109:in `catch'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1109:in `invoke'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1133:in `dispatch!'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:949:in `block in call!'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1109:in `catch'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1109:in `invoke'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:949:in `call!'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:938:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/rack-2.2.8/lib/rack/deflater.rb:44:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/rack-protection-3.0.6/lib/rack/protection/xss_header.rb:20:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/rack-protection-3.0.6/lib/rack/protection/path_traversal.rb:18:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/rack-protection-3.0.6/lib/rack/protection/json_csrf.rb:28:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/rack-protection-3.0.6/lib/rack/protection/base.rb:53:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/rack-protection-3.0.6/lib/rack/protection/base.rb:53:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/rack-protection-3.0.6/lib/rack/protection/frame_options.rb:33:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/rack-2.2.8/lib/rack/logger.rb:17:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/rack-2.2.8/lib/rack/common_logger.rb:38:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:261:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:254:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/rack-2.2.8/lib/rack/head.rb:12:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/rack-2.2.8/lib/rack/method_override.rb:24:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:219:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:2018:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1576:in `block in call'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1792:in `synchronize'
/app/vendor/bundle/ruby/3.1.0/gems/sinatra-3.0.6/lib/sinatra/base.rb:1576:in `call'
/app/vendor/bundle/ruby/3.1.0/gems/rack-2.2.8/lib/rack/handler/webrick.rb:95:in `service'
/app/vendor/bundle/ruby/3.1.0/gems/webrick-1.8.1/lib/webrick/httpserver.rb:140:in `service'
/app/vendor/bundle/ruby/3.1.0/gems/webrick-1.8.1/lib/webrick/httpserver.rb:96:in `run'
/app/vendor/bundle/ruby/3.1.0/gems/webrick-1.8.1/lib/webrick/server.rb:310:in `block in start_thread'

Please sign in to comment.