Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 77996de

Browse files
committed
Parse results and build error
1 parent 85e7c3a commit 77996de

File tree

8 files changed

+132
-76
lines changed

8 files changed

+132
-76
lines changed

‎src/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
22

3-
add_subdirectory(app)
3+
add_subdirectory(app)
4+
add_subdirectory(schema)

‎src/app/CMakeLists.txt

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@ set(PYTHON_SCRIPTS
66
testrunner.py
77
)
88

9-
set (DATA
10-
results_validation_schema.json
11-
)
12-
139
set(WINDOWS_SCRIPTS
1410
openleetcode.bat
1511
)
@@ -41,8 +37,4 @@ endif()
4137

4238
foreach(PYTHON_SCRIPT IN LISTS PYTHON_SCRIPTS)
4339
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${PYTHON_SCRIPT} ${PROJECT_BUILDS_DIR}/${PYTHON_SCRIPT} COPYONLY)
44-
endforeach()
45-
46-
foreach(FILE IN LISTS DATA)
47-
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${FILE} ${PROJECT_BUILDS_DIR}/${FILE} COPYONLY)
4840
endforeach()

‎src/app/openleetcode.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ def main():
210210
sys.exit(1)
211211

212212
if run(f"cmake --build {build_dir} --config Release") != 0:
213-
print(logger.red("Cmake build failed!"))
213+
print(logger.red("Build failed!"))
214214
sys.exit(1)
215215

216216
if run(f"cmake --install {build_dir}") != 0:

‎src/schema/CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
set (DATA
2+
results_validation_schema.json
3+
)
4+
5+
foreach(FILE IN LISTS DATA)
6+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${FILE} ${PROJECT_BUILDS_DIR}/${FILE} COPYONLY)
7+
endforeach()

‎src/ui/index.html

Lines changed: 66 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,74 @@
11
<!DOCTYPE html>
22
<html>
3-
<head>
4-
<meta charset="UTF-8">
5-
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
6-
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; style-src 'self' 'unsafe-inline';">
7-
<title>OpenLeetCode</title>
8-
<link rel="stylesheet" type="text/css" href="styles.css">
9-
<script src="index.js"></script>
10-
</head>
11-
<body>
12-
<div class="panel root-panel"></div>
13-
<div class="control-panel">
14-
<label class="label problem-label" for="problem-select">Problem:</label>
15-
<select id="problem-select">
16-
</select>
17-
<button id="run-button">▶ Run</button>
18-
<button id="save-button">Save</button>
3+
4+
<head>
5+
<meta charset="UTF-8">
6+
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
7+
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; style-src 'self' 'unsafe-inline';">
8+
<title>OpenLeetCode</title>
9+
<link rel="stylesheet" type="text/css" href="styles.css">
10+
<script src="index.js"></script>
11+
</head>
12+
13+
<body>
14+
<div class="panel root-panel"></div>
15+
<div class="control-panel">
16+
<label class="label problem-label" for="problem-select">Problem:</label>
17+
<select id="problem-select">
18+
</select>
19+
<button id="run-button">▶ Run</button>
20+
<button id="save-button">Save</button>
21+
</div>
22+
<div class="panel">
23+
<!-- Left Panel -->
24+
<div id="left-panel" class="panel panel-col">
25+
<div class="tab-panel panel-item-fixed-height">
26+
<div class="tab">Description</div>
27+
<div class="tab-separator"></div>
28+
<div class="tab">Solution</div>
1929
</div>
20-
<div class="panel">
21-
<!-- Left Panel -->
22-
<div id="left-panel" class="panel panel-col">
23-
<div class="tab-panel panel-item-fixed-height">
24-
<div class="tab">Description</div>
25-
<div class="tab-separator"></div>
26-
<div class="tab">Solution</div>
27-
</div>
28-
<div id="tab-description" class="tab-content tab-content-left active">
29-
<div class="markdown-content content" id="description-content"></div>
30-
</div>
31-
<div id="tab-solution" class="tab-content tab-content-left">
32-
<div class="markdown-content content" id="solution-content"></div>
33-
</div>
34-
<!-- Add more tab content panes as needed -->
30+
<div id="tab-description" class="tab-content tab-content-left active">
31+
<div class="markdown-content content" id="description-content"></div>
3532
</div>
36-
<!-- Right Panel -->
37-
<div id="right-panel" class="panel panel-col panel-item">
38-
<!-- Right Panel TOP -->
39-
<div id="top-right-panel" class="panel-item panel-left panel panel-col">
40-
<div class="tab-panel">Code</div>
41-
<div id="user-solution-content" class="panel panel-item">
42-
</div>
43-
</div>
44-
<!-- Right Panel BOTTOM -->
45-
<div id="bottom-right-panel" class="panel-item">
46-
<div class="tab-panel">
47-
<div class="tab">Testcase</div>
48-
<div class="tab-separator"></div>
49-
<div class="tab">Test Results</div>
50-
<div class="tab-separator"></div>
51-
<div class="tab">Compilation</div>
52-
</div>
53-
<div id="tab-testcase" class="tab-content content active">
54-
<div class="testcase-content" id="testcase-content content">
55-
</div>
56-
</div>
57-
<div id="tab-test-results" class="tab-test-results content">
58-
<div class="test-results-content" id="test-results-content"></div>
59-
</div>
60-
<div id="tab-compilation" class="tab-compilation content">
61-
<div class="compilation-content" id="compilation-content"></div>
62-
</div>
63-
</div>
33+
<div id="tab-solution" class="tab-content tab-content-left">
34+
<div class="markdown-content content" id="solution-content"></div>
35+
</div>
36+
<!-- Add more tab content panes as needed -->
37+
</div>
38+
<!-- Left Panel END -->
39+
<!-- Right Panel -->
40+
<div id="right-panel" class="panel panel-col panel-item">
41+
<!-- Right Panel TOP -->
42+
<div id="top-right-panel" class="panel-item panel-left panel panel-col">
43+
<div class="tab-panel">Code</div>
44+
<div id="user-solution-content" class="panel panel-item"></div>
6445
</div>
46+
<!-- Right Panel TOP END -->
47+
<!-- Right Panel BOTTOM -->
48+
<div id="bottom-right-panel" class="panel-item">
49+
<div class="tab-panel">
50+
<div class="tab">Testcase</div>
51+
<div class="tab-separator"></div>
52+
<div class="tab">Test Results</div>
53+
<div class="tab-separator"></div>
54+
<div class="tab" id="tab-compilation">Compilation</div>
55+
</div>
56+
<div id="tab-testcase" class="tab-content content active">
57+
<div class="testcase-content" id="testcase-content content">
58+
</div>
59+
</div>
60+
<div id="tab-test-results" class="tab-test-results content">
61+
<div class="test-results-content" id="test-results-content"></div>
62+
</div>
63+
<div id="tab-compilation" class="tab-compilation content">
64+
<pre class="compilation-content" id="compilation-content"></pre>
65+
</div>
6566
</div>
67+
<!-- Right Panel BOTTOM END -->
6668
</div>
67-
</body>
69+
<!-- Right Panel END -->
70+
</div>
71+
</div>
72+
</body>
73+
6874
</html>

‎src/ui/index.js

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,28 @@ function saveSolution(language, content) {
3434
file.writeFileSync(userSolutionFilename, content);
3535
}
3636

37+
function parseStdout(stdout) {
38+
// stdout:
39+
// LongestSubstringWithoutRepeatingCharacters for testcase All in language cpp
40+
// Results written to /path\to/openleetcode/src/ui/testcase_output/<testname><datetime>.results
41+
// Status: <status>
42+
// Duration: <duration>ms
43+
return stdout.match(/Resultswrittento(.*\.results)/)[1];
44+
}
45+
46+
function parseBuildError(stdout) {
47+
// Running command: cmake --build ...
48+
// <MATCHED BUILD ERROR>
49+
// Error running the command: cmake --build
50+
const regex = /cmake--build[\s\S]*?cmake--build/;
51+
const match = stdout.match(regex);
52+
const buildError = match[0].split('\n').slice(1, -1).join('\n');
53+
54+
return buildError;
55+
}
56+
3757
function run() {
58+
saveSolution('cpp', editor.getValue());
3859
const pathsFile = DirectoryManager.getPathsFile();
3960
if (!file.existsSync(pathsFile)) {
4061
throw new Error(`Paths file does not exist: ${pathsFile}`);
@@ -47,16 +68,34 @@ function run() {
4768
const command = `${problemBuildsDir}/openleetcode${extension} ` +
4869
`--problem_builds_dir ${problemBuildsDir} ` +
4970
`--language cpp ` +
50-
`--problem ${activeProblem}`;
71+
`--problem ${activeProblem} ` +
72+
`--verbose`;
5173

74+
var resultsFilename;
5275
exec(command, (error, stdout, stderr) => {
5376
if (error) {
54-
console.error(`exec error: ${error}`);
77+
var element = document.getElementById("compilation-content");
78+
element.textContent = parseBuildError(stdout);
79+
document.getElementById('tab-compilation').click();
80+
return;
5581
}
56-
// console.log(`stdout: ${stdout}`);
57-
console.error(`stderr: ${stderr}`);
58-
console.error(`stdout: ${stdout}`);
59-
});
82+
var element = document.getElementById("compilation-content");
83+
element.textContent = "";
84+
85+
resultsFilename = parseStdout(stdout);
86+
if (!resultsFilename) {
87+
throw new Error("Could not parse results filename from stdout: " +
88+
"${stdout}");
89+
}
90+
91+
if (!file.existsSync(resultsFilename)) {
92+
throw new Error(`Results file does not exist: ${resultsFilename}`);
93+
}
94+
95+
const results = file.readFileSync(resultsFilename, 'utf8');
96+
console.log(results);
97+
const resultsJson = JSON.parse(results);
98+
});
6099
}
61100

62101
function setDescription(problemName) {

‎src/ui/styles.css

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ select:hover {
101101

102102
.tab-content-left {
103103
height: 100vh;
104+
margin: 5px;
104105
}
105106

106107
.tab-content {
@@ -115,6 +116,16 @@ select:hover {
115116
background-color: var(--panel_background);
116117
}
117118

119+
.compilation-content {
120+
background-color: var(--grey-very-dark);
121+
width: 100%;
122+
height: 100%;
123+
white-space: pre-wrap; /* Wraps the text */
124+
word-break: break-all; /* Breaks the words */
125+
margin: 0;
126+
padding: 3px;
127+
}
128+
118129
.tab-separator {
119130
background-color: var(--border_color);
120131
width: 1px;

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /