Skip to content

Commit c4b26f2

Browse files
committed
feat: implement golang and fix empty lines
1 parent d73233f commit c4b26f2

File tree

3 files changed

+80
-64
lines changed

3 files changed

+80
-64
lines changed

src/code-quality/tokenizer/CodeTokenizer.ts

Lines changed: 72 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
11
import { CodeTokens } from './CodeTokens';
22
import { PythonIdentifiers } from './identifiers/PythonIdentifiers';
33
import { CommonLangIdentifiers } from './identifiers/CommonLangIdentifiers';
4+
import { GolangIdentifiers } from './identifiers/GolangIdentifiers';
45

56
export class CodeTokenizer {
67
private pyIdentifiers = new PythonIdentifiers();
78

8-
public tokenizeCode(code: string, language: string): CodeTokens[] {
9+
private golangIdentifiers = new GolangIdentifiers();
10+
11+
public tokenize(code: string, language: string): CodeTokens[] {
912
switch (language) {
1013
case 'python':
11-
return this.tokenizePython(code, this.pyIdentifiers);
14+
return this.tokenizeCode(code, this.pyIdentifiers);
15+
case 'go':
16+
return this.tokenizeCode(code, this.golangIdentifiers);
1217
default:
1318
return [];
1419
}
1520
}
1621

17-
private tokenizePython(
22+
private tokenizeCode(
1823
code: string,
1924
languageIdentifier: CommonLangIdentifiers,
2025
): CodeTokens[] {
@@ -24,68 +29,71 @@ export class CodeTokenizer {
2429
lines.forEach((line) => {
2530
const trimedLine = line.trim();
2631

27-
// Function detection
28-
if (
29-
trimedLine.startsWith(languageIdentifier.functionIdentifier()) &&
30-
trimedLine.endsWith(languageIdentifier.endLoopAndCondIdentifier())
31-
) {
32-
tokenizedCode.push(CodeTokens.FUNC);
33-
const numberOfParams =
34-
CodeTokenizer.numberOfFunctionParameters(trimedLine);
35-
tokenizedCode = CodeTokenizer.pushTokensInTab(
36-
tokenizedCode,
37-
CodeTokens.FUNCPARAM,
38-
numberOfParams,
39-
);
32+
if (trimedLine !== '' && trimedLine !== '}')
33+
if (
34+
trimedLine.startsWith(languageIdentifier.functionIdentifier()) &&
35+
trimedLine.endsWith(languageIdentifier.endLoopAndCondIdentifier())
36+
) {
37+
// Function detection
38+
tokenizedCode.push(CodeTokens.FUNC);
39+
const numberOfParams =
40+
CodeTokenizer.numberOfFunctionParameters(trimedLine);
41+
tokenizedCode = CodeTokenizer.pushTokensInTab(
42+
tokenizedCode,
43+
CodeTokens.FUNCPARAM,
44+
numberOfParams,
45+
);
46+
47+
// For line
48+
} else if (
49+
trimedLine.startsWith(languageIdentifier.forIdentifier()) &&
50+
trimedLine.endsWith(languageIdentifier.endLoopAndCondIdentifier())
51+
) {
52+
tokenizedCode.push(CodeTokens.FOR);
53+
// While line
54+
} else if (
55+
trimedLine.startsWith(languageIdentifier.whileIdentifier()) &&
56+
trimedLine.endsWith(languageIdentifier.endLoopAndCondIdentifier())
57+
) {
58+
tokenizedCode.push(CodeTokens.WHILE);
59+
// If line
60+
} else if (
61+
trimedLine.startsWith(languageIdentifier.ifIdentifier()) &&
62+
trimedLine.endsWith(languageIdentifier.endLoopAndCondIdentifier())
63+
) {
64+
tokenizedCode.push(CodeTokens.IF);
65+
const andOccurrences = CodeTokenizer.numberTokenPresentInLine(
66+
languageIdentifier.andIdentifier(),
67+
trimedLine,
68+
);
69+
tokenizedCode = CodeTokenizer.pushTokensInTab(
70+
tokenizedCode,
71+
CodeTokens.AND,
72+
andOccurrences,
73+
);
4074

41-
// For line
42-
} else if (
43-
trimedLine.startsWith(languageIdentifier.forIdentifier()) &&
44-
trimedLine.endsWith(languageIdentifier.endLoopAndCondIdentifier())
45-
) {
46-
tokenizedCode.push(CodeTokens.FOR);
47-
// While line
48-
} else if (
49-
trimedLine.startsWith(languageIdentifier.whileIdentifier()) &&
50-
trimedLine.endsWith(languageIdentifier.endLoopAndCondIdentifier())
51-
) {
52-
tokenizedCode.push(CodeTokens.WHILE);
53-
// If line
54-
} else if (
55-
trimedLine.startsWith(languageIdentifier.ifIdentifier()) &&
56-
trimedLine.endsWith(languageIdentifier.endLoopAndCondIdentifier())
57-
) {
58-
tokenizedCode.push(CodeTokens.IF);
59-
const andOccurrences = CodeTokenizer.numberTokenPresentInLine(
60-
languageIdentifier.andIdentifier(),
61-
trimedLine,
62-
);
63-
tokenizedCode = CodeTokenizer.pushTokensInTab(
64-
tokenizedCode,
65-
CodeTokens.AND,
66-
andOccurrences,
67-
);
75+
const orOccurrences = CodeTokenizer.numberTokenPresentInLine(
76+
languageIdentifier.orIdentifier(),
77+
trimedLine,
78+
);
79+
tokenizedCode = CodeTokenizer.pushTokensInTab(
80+
tokenizedCode,
81+
CodeTokens.OR,
82+
orOccurrences,
83+
);
6884

69-
const orOccurrences = CodeTokenizer.numberTokenPresentInLine(
70-
languageIdentifier.orIdentifier(),
71-
trimedLine,
72-
);
73-
tokenizedCode = CodeTokenizer.pushTokensInTab(
74-
tokenizedCode,
75-
CodeTokens.OR,
76-
orOccurrences,
77-
);
85+
// Case line
86+
} else if (
87+
trimedLine.startsWith(languageIdentifier.caseIdentifier()) &&
88+
trimedLine.endsWith(':')
89+
) {
90+
tokenizedCode.push(CodeTokens.CASE);
91+
// Other lines
92+
} else {
93+
tokenizedCode.push(CodeTokens.LINE);
94+
}
7895

79-
// Case line
80-
} else if (
81-
trimedLine.startsWith(languageIdentifier.caseIdentifier()) &&
82-
trimedLine.endsWith(languageIdentifier.endLoopAndCondIdentifier())
83-
) {
84-
tokenizedCode.push(CodeTokens.CASE);
85-
// Other lines
86-
} else {
87-
tokenizedCode.push(CodeTokens.LINE);
88-
}
96+
console.log(trimedLine);
8997
});
9098

9199
console.log(tokenizedCode);
@@ -95,7 +103,8 @@ export class CodeTokenizer {
95103

96104
private static numberOfFunctionParameters(line: string): number {
97105
const attributes = line.substring(line.indexOf('('), line.indexOf(')'));
98-
return this.numberTokenPresentInLine(',', attributes) + 1;
106+
const attribNb = this.numberTokenPresentInLine(',', attributes);
107+
return attribNb === 0 ? 0 : attribNb + 1;
99108
}
100109

101110
private static numberTokenPresentInLine(token: string, line: string): number {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { CommonLangIdentifiers } from './CommonLangIdentifiers';
2+
3+
export class GolangIdentifiers extends CommonLangIdentifiers {
4+
functionIdentifier(): string {
5+
return 'func';
6+
}
7+
}

src/submissions/submissions.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export class SubmissionsService {
6060
insertSubmissionDTO.language,
6161
);
6262
// submission.self = submission;
63-
this.codeTokenizer.tokenizeCode(submission.code, submission.language);
63+
this.codeTokenizer.tokenize(submission.code, submission.language);
6464

6565
return submission.save();
6666
}

0 commit comments

Comments
 (0)