@specs-feup/clava-misra 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/MISRATool.d.ts +8 -1
  2. package/dist/MISRATool.d.ts.map +1 -1
  3. package/dist/MISRATool.js +18 -1
  4. package/dist/MISRATool.js.map +1 -1
  5. package/dist/main.js +0 -1
  6. package/dist/main.js.map +1 -1
  7. package/dist/rules/index.d.ts +1 -1
  8. package/dist/rules/index.js +1 -1
  9. package/dist/utils/CallUtils.d.ts.map +1 -1
  10. package/dist/utils/CallUtils.js.map +1 -1
  11. package/dist/utils/FileUtils.d.ts +25 -9
  12. package/dist/utils/FileUtils.d.ts.map +1 -1
  13. package/dist/utils/FileUtils.js +56 -33
  14. package/dist/utils/FileUtils.js.map +1 -1
  15. package/dist/utils/FunctionUtils.d.ts +22 -0
  16. package/dist/utils/FunctionUtils.d.ts.map +1 -1
  17. package/dist/utils/FunctionUtils.js +22 -0
  18. package/dist/utils/FunctionUtils.js.map +1 -1
  19. package/dist/utils/IdentifierUtils.d.ts +49 -0
  20. package/dist/utils/IdentifierUtils.d.ts.map +1 -1
  21. package/dist/utils/IdentifierUtils.js +53 -7
  22. package/dist/utils/IdentifierUtils.js.map +1 -1
  23. package/dist/utils/JoinpointUtils.d.ts +17 -0
  24. package/dist/utils/JoinpointUtils.d.ts.map +1 -1
  25. package/dist/utils/JoinpointUtils.js +17 -0
  26. package/dist/utils/JoinpointUtils.js.map +1 -1
  27. package/dist/utils/ProgramUtils.d.ts +26 -1
  28. package/dist/utils/ProgramUtils.d.ts.map +1 -1
  29. package/dist/utils/ProgramUtils.js +26 -1
  30. package/dist/utils/ProgramUtils.js.map +1 -1
  31. package/dist/utils/TypeDeclUtils.d.ts.map +1 -1
  32. package/dist/utils/TypeDeclUtils.js.map +1 -1
  33. package/dist/utils/VarUtils.d.ts +33 -1
  34. package/dist/utils/VarUtils.d.ts.map +1 -1
  35. package/dist/utils/VarUtils.js +33 -1
  36. package/dist/utils/VarUtils.js.map +1 -1
  37. package/package.json +1 -2
  38. package/src/MISRATool.ts +20 -2
  39. package/src/main.ts +1 -4
  40. package/src/rules/index.ts +1 -1
  41. package/src/utils/CallUtils.ts +0 -3
  42. package/src/utils/FileUtils.ts +66 -38
  43. package/src/utils/FunctionUtils.ts +25 -3
  44. package/src/utils/IdentifierUtils.ts +58 -10
  45. package/src/utils/JoinpointUtils.ts +18 -1
  46. package/src/utils/ProgramUtils.ts +27 -3
  47. package/src/utils/TypeDeclUtils.ts +0 -1
  48. package/src/utils/VarUtils.ts +34 -2
@@ -3,6 +3,10 @@ import MISRAContext from "./MISRAContext.js";
3
3
  export default class MISRATool {
4
4
  #private;
5
5
  static context: MISRAContext;
6
+ /**
7
+ * Checks whether the source code complies with MISRA C coding guidelines and reports all violations identified during the analysis
8
+ * @param startingPoint The AST node from which to start the analysis
9
+ */
6
10
  static checkCompliance(startingPoint?: Program | FileJp): void;
7
11
  /**
8
12
  * Transforms the source code to comply with the coding guidelines.
@@ -13,9 +17,12 @@ export default class MISRATool {
13
17
  * Recursively transforms the AST using a pre-order traversal
14
18
  *
15
19
  * @param $jp AST node from which to start the visit.
16
- * @returns Return true if any modifications were made (removal, replacement, or changes in descendants). Otherwise, returns false.
20
+ * @returns Return true if any modification was made (removal, replacement or changes in descendants). Otherwise, returns false.
17
21
  */
18
22
  private static transformAST;
23
+ /**
24
+ * Validates the C standard, creates a MISRA context, and initializes rules.
25
+ */
19
26
  private static init;
20
27
  /**
21
28
  * Selects applicable rules according to the analysis type. When not specified, both system and single translation unit rules are selected.
@@ -1 +1 @@
1
- {"version":3,"file":"MISRATool.d.ts","sourceRoot":"","sources":["../src/MISRATool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAa,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAEjF,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAW7C,MAAM,CAAC,OAAO,OAAO,SAAS;;IAE1B,OAAc,OAAO,EAAE,YAAY,CAAC;WAItB,eAAe,CAAC,aAAa,GAAE,OAAO,GAAG,MAAgC;IAYvF;;;OAGG;WACW,iBAAiB;IAkB/B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAsB3B,OAAO,CAAC,MAAM,CAAC,IAAI;IAOnB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAKxB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IASjC,OAAO,CAAC,MAAM,CAAC,WAAW;IAe1B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAgB3B;;OAEG;WACW,aAAa,IAAI,MAAM;IAIrC;;OAEG;WACW,mBAAmB,IAAI,MAAM;CAG9C"}
1
+ {"version":3,"file":"MISRATool.d.ts","sourceRoot":"","sources":["../src/MISRATool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAyB,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAE7F,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAY7C,MAAM,CAAC,OAAO,OAAO,SAAS;;IAE1B,OAAc,OAAO,EAAE,YAAY,CAAC;IAIpC;;;OAGG;WACW,eAAe,CAAC,aAAa,GAAE,OAAO,GAAG,MAAgC;IAYvF;;;OAGG;WACW,iBAAiB;IA4B/B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAsB3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,IAAI;IAOnB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAKxB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IASjC,OAAO,CAAC,MAAM,CAAC,WAAW;IAe1B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAgB3B;;OAEG;WACW,aAAa,IAAI,MAAM;IAIrC;;OAEG;WACW,mBAAmB,IAAI,MAAM;CAG9C"}
package/dist/MISRATool.js CHANGED
@@ -1,9 +1,11 @@
1
1
  import Query from "@specs-feup/lara/api/weaver/Query.js";
2
+ import { FunctionJp } from "@specs-feup/clava/api/Joinpoints.js";
2
3
  import MISRAContext from "./MISRAContext.js";
3
4
  import { MISRATransformationType } from "./MISRA.js";
4
5
  import Clava from "@specs-feup/clava/api/clava/Clava.js";
5
6
  import { resetCaches } from "./utils/ProgramUtils.js";
6
7
  import { selectRules } from "./rules/index.js";
8
+ import ClavaJoinPoints from "@specs-feup/clava/api/clava/ClavaJoinPoints.js";
7
9
  var ExecutionMode;
8
10
  (function (ExecutionMode) {
9
11
  ExecutionMode[ExecutionMode["CORRECTION"] = 0] = "CORRECTION";
@@ -14,6 +16,10 @@ export default class MISRATool {
14
16
  static context;
15
17
  static #standards = new Set(["c90", "c99", "c11"]);
16
18
  static #ruleTypes = new Set(["all", "single", "system"]);
19
+ /**
20
+ * Checks whether the source code complies with MISRA C coding guidelines and reports all violations identified during the analysis
21
+ * @param startingPoint The AST node from which to start the analysis
22
+ */
17
23
  static checkCompliance(startingPoint = Query.root()) {
18
24
  this.init();
19
25
  const nodes = [startingPoint, ...startingPoint.descendants];
@@ -35,19 +41,27 @@ export default class MISRATool {
35
41
  if (configFilePath) {
36
42
  this.context.config = configFilePath;
37
43
  }
44
+ // Correct violations
38
45
  let iteration = 0;
39
46
  let modified = true;
40
47
  while (modified) {
41
48
  console.log(`[Clava-MISRATool] Iteration #${++iteration}: Applying MISRA-C transformations...`);
42
49
  modified = this.transformAST(Query.root());
43
50
  }
51
+ // Additional transformation: insert explicit 'void' in the argument list of functions with no parameters
52
+ const functionJps = Query.search(FunctionJp).get();
53
+ functionJps.forEach(functionJp => {
54
+ if (functionJp.params.length === 0) {
55
+ functionJp.addParam("", ClavaJoinPoints.builtinType("void"));
56
+ }
57
+ });
44
58
  this.outputReport(ExecutionMode.CORRECTION);
45
59
  }
46
60
  /**
47
61
  * Recursively transforms the AST using a pre-order traversal
48
62
  *
49
63
  * @param $jp AST node from which to start the visit.
50
- * @returns Return true if any modifications were made (removal, replacement, or changes in descendants). Otherwise, returns false.
64
+ * @returns Return true if any modification was made (removal, replacement or changes in descendants). Otherwise, returns false.
51
65
  */
52
66
  static transformAST($jp) {
53
67
  let modified = false;
@@ -67,6 +81,9 @@ export default class MISRATool {
67
81
  }
68
82
  return modified;
69
83
  }
84
+ /**
85
+ * Validates the C standard, creates a MISRA context, and initializes rules.
86
+ */
70
87
  static init() {
71
88
  this.validateStdVersion();
72
89
  this.context = new MISRAContext();
@@ -1 +1 @@
1
- {"version":3,"file":"MISRATool.js","sourceRoot":"","sources":["../src/MISRATool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MISRATool.js","sourceRoot":"","sources":["../src/MISRATool.ts"],"names":[],"mappings":"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"}
package/dist/main.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import MISRATool from "./MISRATool.js";
2
2
  MISRATool.checkCompliance();
3
3
  MISRATool.correctViolations();
4
- //await VisualizationTool.visualize();
5
4
  //# sourceMappingURL=main.js.map
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAEvC,SAAS,CAAC,eAAe,EAAE,CAAC;AAC5B,SAAS,CAAC,iBAAiB,EAAE,CAAC;AAE9B,sCAAsC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAEvC,SAAS,CAAC,eAAe,EAAE,CAAC;AAC5B,SAAS,CAAC,iBAAiB,EAAE,CAAC"}
@@ -2,7 +2,7 @@ import MISRAContext from "../MISRAContext.js";
2
2
  import MISRARule from "../MISRARule.js";
3
3
  /**
4
4
  * Selects MISRA-C rules based on the provided analysis type.
5
- * Returns rules sorted by priority (lower value = higher priority).
5
+ * Returns rules sorted by priority (lower value has higher priority).
6
6
  *
7
7
  * @param context - The shared analysis context
8
8
  * @param analysisType - Rule type to include ("all" for all rules).
@@ -31,7 +31,7 @@ import Rule_8_7_RestrictExternalLinkage from "./Section8_DeclarationsAndDefiniti
31
31
  import Rule_8_9_BlockScopeDefinition from "./Section8_DeclarationsAndDefinitions/Rule_8_9_BlockScopeDefinition.js";
32
32
  /**
33
33
  * Selects MISRA-C rules based on the provided analysis type.
34
- * Returns rules sorted by priority (lower value = higher priority).
34
+ * Returns rules sorted by priority (lower value has higher priority).
35
35
  *
36
36
  * @param context - The shared analysis context
37
37
  * @param analysisType - Rule type to include ("all" for all rules).
@@ -1 +1 @@
1
- {"version":3,"file":"CallUtils.d.ts","sourceRoot":"","sources":["../../src/utils/CallUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAsB,MAAM,qCAAqC,CAAC;AAMvF;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAkB9D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,MAAM,CAEjE"}
1
+ {"version":3,"file":"CallUtils.d.ts","sourceRoot":"","sources":["../../src/utils/CallUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAsB,MAAM,qCAAqC,CAAC;AAGvF;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAkB9D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,MAAM,CAEjE"}
@@ -1 +1 @@
1
- {"version":3,"file":"CallUtils.js","sourceRoot":"","sources":["../../src/utils/CallUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAU,UAAU,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AACvF,OAAO,KAAK,MAAM,sCAAsC,CAAC;AAKzD;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAY;IACjD,IAAK,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC,iCAAiC;QACvE,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,EAAC,cAAc,EAAE,KAAK,EAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5G,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9H,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,8BAA8B;QAC7E,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IACzC,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5C,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAEtC,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,EAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;AACxF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,MAAY;IACrD,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACxG,CAAC"}
1
+ {"version":3,"file":"CallUtils.js","sourceRoot":"","sources":["../../src/utils/CallUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAU,UAAU,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AACvF,OAAO,KAAK,MAAM,sCAAsC,CAAC;AAEzD;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAY;IACjD,IAAK,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC,iCAAiC;QACvE,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,EAAC,cAAc,EAAE,KAAK,EAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5G,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9H,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,8BAA8B;QAC7E,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IACzC,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5C,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAEtC,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,EAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;AACxF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,MAAY;IACrD,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACxG,CAAC"}
@@ -6,6 +6,14 @@ import { FileJp, Program, Call, FunctionJp, Joinpoint } from "@specs-feup/clava/
6
6
  * @param fileJp - The file to validate.
7
7
  */
8
8
  export declare function isValidFile(fileJp: FileJp, jpType?: typeof Joinpoint, index?: number): boolean | Joinpoint | undefined;
9
+ /**
10
+ * Checks if the rebuilt version of the file compiles and if the provided call is no longer implicit.
11
+ *
12
+ * @param fileJp The file to analyze
13
+ * @param funcName The function name to search the call
14
+ * @param callIndex The index of the call
15
+ */
16
+ export declare function isValidFileWithExplicitCall(fileJp: FileJp, funcName: string, callIndex: number, checkNumParams?: boolean): boolean;
9
17
  /**
10
18
  * Retrieves the list of header files included in the given file
11
19
  *
@@ -24,7 +32,7 @@ export declare function removeIncludeFromFile(includeName: string, fileJp: FileJ
24
32
  * Returns all files in the program that include a given header file using the `#include` directive
25
33
  *
26
34
  * @param headerName - The name of the header file to search for
27
- * @returns A array of files that include the specified header
35
+ * @returns An array of files that include the specified header
28
36
  */
29
37
  export declare function findFilesReferencingHeader(headerName: string): FileJp[];
30
38
  /**
@@ -35,17 +43,25 @@ export declare function findFilesReferencingHeader(headerName: string): FileJp[]
35
43
  */
36
44
  export declare function getFilesWithCallToImplicitFunction(programJp: Program): FileJp[];
37
45
  /**
38
- * Checks if the rebuilt version of the file compiles and if the provided call is no longer implicit.
46
+ * Inserts an extern declaration of the given function into the file.
39
47
  *
40
- * @param fileJp The file to analyze
41
- * @param funcName The function name to search the call
42
- * @param callIndex The index of the call
48
+ * @param fileJp The file to modify.
49
+ * @param functionJp The function to declare as extern.
50
+ * @returns The inserted join point, or undefined if the function has no external linkage.
43
51
  */
44
- export declare function isValidFileWithExplicitCall(fileJp: FileJp, funcName: string, callIndex: number, checkNumParams?: boolean): boolean;
52
+ export declare function addExternFunctionDecl(fileJp: FileJp, functionJp: FunctionJp): Joinpoint | undefined;
45
53
  /**
46
- *
54
+ * Returns all extern function declarations in the given file
55
+ * @param fileJp The file join point
56
+ * @returns An array of functions declared with 'extern'
47
57
  */
48
- export declare function addExternFunctionDecl(fileJp: FileJp, functionJp: FunctionJp): Joinpoint | undefined;
49
58
  export declare function getExternFunctionDecls(fileJp: FileJp): FunctionJp[];
50
- export declare function getCallsToLibrary(fileJp: FileJp, libraryFile: string, functionNames?: Set<string>): Call[];
59
+ /**
60
+ * Returns function calls from a file that are defined in the provided library header. Optionally filters by function names.
61
+ *
62
+ * @param fileJp The file join point
63
+ * @param libraryName Header filename
64
+ * @param functionNames Optional list of function names to filter
65
+ */
66
+ export declare function getCallsToLibrary(fileJp: FileJp, libraryName: string, functionNames?: Set<string>): Call[];
51
67
  //# sourceMappingURL=FileUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileUtils.d.ts","sourceRoot":"","sources":["../../src/utils/FileUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAW,IAAI,EAAE,UAAU,EAAE,SAAS,EAAgB,MAAM,qCAAqC,CAAC;AAM1H;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAI,OAAO,GAAG,SAAS,GAAG,SAAS,CAkBvH;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAE7D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAGxE;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,EAAE,CAQ/E;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAE,OAAe,GAAG,OAAO,CAqBzI;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAenG;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,gBAEpD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,GAAE,GAAG,CAAC,MAAM,CAAa,GAAG,IAAI,EAAE,CAMrH"}
1
+ {"version":3,"file":"FileUtils.d.ts","sourceRoot":"","sources":["../../src/utils/FileUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAW,IAAI,EAAE,UAAU,EAAE,SAAS,EAAgB,MAAM,qCAAqC,CAAC;AAM1H;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAI,OAAO,GAAG,SAAS,GAAG,SAAS,CAuBvH;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAE,OAAe,GAAG,OAAO,CA4BzI;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAE7D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAGxE;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,EAAE,CAQ/E;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAenG;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,CAEnE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,GAAE,GAAG,CAAC,MAAM,CAAa,GAAG,IAAI,EAAE,CAMrH"}
@@ -11,20 +11,54 @@ import path from "path";
11
11
  * @param fileJp - The file to validate.
12
12
  */
13
13
  export function isValidFile(fileJp, jpType, index) {
14
+ let result = true;
15
+ // Create a temporary copy of the file for validation
14
16
  const programJp = fileJp.parent;
15
17
  let copyFile = ClavaJoinPoints.fileWithSource(`temp_misra_${fileJp.name}`, fileJp.code, fileJp.relativeFolderpath);
16
- let result = true;
17
18
  copyFile = programJp.addFile(copyFile);
18
19
  try {
19
20
  const rebuiltFile = copyFile.rebuild();
20
- const fileToRemove = Query.searchFrom(programJp, FileJp, { filepath: rebuiltFile.filepath }).first();
21
- if (jpType && index) {
21
+ if (jpType && index) { // If requested, return a specific join point inside the rebuilt file
22
22
  result = Query.searchFrom(rebuiltFile, jpType).get()[index];
23
23
  }
24
+ // Remove the temporary file
25
+ const fileToRemove = Query.searchFrom(programJp, FileJp, { filepath: rebuiltFile.filepath }).first();
24
26
  fileToRemove?.detach();
25
27
  return result;
26
28
  }
27
29
  catch (error) {
30
+ // On rebuild failure, delete copy file and return false
31
+ copyFile.detach();
32
+ return false;
33
+ }
34
+ }
35
+ /**
36
+ * Checks if the rebuilt version of the file compiles and if the provided call is no longer implicit.
37
+ *
38
+ * @param fileJp The file to analyze
39
+ * @param funcName The function name to search the call
40
+ * @param callIndex The index of the call
41
+ */
42
+ export function isValidFileWithExplicitCall(fileJp, funcName, callIndex, checkNumParams = false) {
43
+ const programJp = fileJp.parent;
44
+ // Create a temporary copy of the file for validation
45
+ let copyFile = ClavaJoinPoints.fileWithSource(`temp_misra_${fileJp.name}`, fileJp.code, fileJp.relativeFolderpath);
46
+ copyFile = programJp.addFile(copyFile);
47
+ try {
48
+ // Rebuild the file to check validity
49
+ const rebuiltFile = copyFile.rebuild();
50
+ const fileToRemove = Query.searchFrom(programJp, FileJp, { filepath: rebuiltFile.filepath }).first();
51
+ // Locate the function call and check if it is implicit
52
+ const callJp = Query.searchFrom(fileToRemove, Call, { name: funcName }).get().at(callIndex);
53
+ let isExplicitCall = callJp !== undefined && !isCallToImplicitFunction(callJp);
54
+ if (checkNumParams && isExplicitCall) {
55
+ isExplicitCall = isExplicitCall && callJp.args.length === callJp.directCallee.params.length;
56
+ }
57
+ // Remove the temporary file
58
+ fileToRemove?.detach();
59
+ return isExplicitCall;
60
+ }
61
+ catch (error) { // On rebuild failure, delete copy file and return false
28
62
  copyFile.detach();
29
63
  return false;
30
64
  }
@@ -52,7 +86,7 @@ export function removeIncludeFromFile(includeName, fileJp) {
52
86
  * Returns all files in the program that include a given header file using the `#include` directive
53
87
  *
54
88
  * @param headerName - The name of the header file to search for
55
- * @returns A array of files that include the specified header
89
+ * @returns An array of files that include the specified header
56
90
  */
57
91
  export function findFilesReferencingHeader(headerName) {
58
92
  return Query.search(FileJp, (jp) => { return getIncludesOfFile(jp).has(headerName); }).get();
@@ -68,34 +102,11 @@ export function getFilesWithCallToImplicitFunction(programJp) {
68
102
  return files.filter((fileJp) => Query.searchFrom(fileJp, Call, (callJp) => isCallToImplicitFunction(callJp)).get().length > 0);
69
103
  }
70
104
  /**
71
- * Checks if the rebuilt version of the file compiles and if the provided call is no longer implicit.
72
- *
73
- * @param fileJp The file to analyze
74
- * @param funcName The function name to search the call
75
- * @param callIndex The index of the call
76
- */
77
- export function isValidFileWithExplicitCall(fileJp, funcName, callIndex, checkNumParams = false) {
78
- const programJp = fileJp.parent;
79
- let copyFile = ClavaJoinPoints.fileWithSource(`temp_misra_${fileJp.name}`, fileJp.code, fileJp.relativeFolderpath);
80
- copyFile = programJp.addFile(copyFile);
81
- try {
82
- const rebuiltFile = copyFile.rebuild();
83
- const fileToRemove = Query.searchFrom(programJp, FileJp, { filepath: rebuiltFile.filepath }).first();
84
- const callJp = Query.searchFrom(fileToRemove, Call, { name: funcName }).get().at(callIndex);
85
- let isExplicitCall = callJp !== undefined && !isCallToImplicitFunction(callJp);
86
- if (checkNumParams && isExplicitCall) {
87
- isExplicitCall = isExplicitCall && callJp.args.length === callJp.directCallee.params.length;
88
- }
89
- fileToRemove?.detach();
90
- return isExplicitCall;
91
- }
92
- catch (error) {
93
- copyFile.detach();
94
- return false;
95
- }
96
- }
97
- /**
105
+ * Inserts an extern declaration of the given function into the file.
98
106
  *
107
+ * @param fileJp The file to modify.
108
+ * @param functionJp The function to declare as extern.
109
+ * @returns The inserted join point, or undefined if the function has no external linkage.
99
110
  */
100
111
  export function addExternFunctionDecl(fileJp, functionJp) {
101
112
  if (!isExternalLinkageIdentifier(functionJp)) {
@@ -110,12 +121,24 @@ export function addExternFunctionDecl(fileJp, functionJp) {
110
121
  const newExternStmt = childAfterExtern.insertBefore(externStmt);
111
122
  return newExternStmt;
112
123
  }
124
+ /**
125
+ * Returns all extern function declarations in the given file
126
+ * @param fileJp The file join point
127
+ * @returns An array of functions declared with 'extern'
128
+ */
113
129
  export function getExternFunctionDecls(fileJp) {
114
130
  return Query.searchFrom(fileJp, FunctionJp, { storageClass: StorageClass.EXTERN }).get();
115
131
  }
116
- export function getCallsToLibrary(fileJp, libraryFile, functionNames = new Set()) {
132
+ /**
133
+ * Returns function calls from a file that are defined in the provided library header. Optionally filters by function names.
134
+ *
135
+ * @param fileJp The file join point
136
+ * @param libraryName Header filename
137
+ * @param functionNames Optional list of function names to filter
138
+ */
139
+ export function getCallsToLibrary(fileJp, libraryName, functionNames = new Set()) {
117
140
  return Query.searchFrom(fileJp, Call, (callJp) => callJp.function?.isInSystemHeader &&
118
- callJp.function?.filepath.endsWith(libraryFile) &&
141
+ callJp.function?.filepath.endsWith(libraryName) &&
119
142
  (functionNames.size === 0 || functionNames.has(callJp.name))).get();
120
143
  }
121
144
  //# sourceMappingURL=FileUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileUtils.js","sourceRoot":"","sources":["../../src/utils/FileUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileUtils.js","sourceRoot":"","sources":["../../src/utils/FileUtils.ts"],"names":[],"mappings":"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"}
@@ -18,8 +18,30 @@ export declare function getVLAFieldParamReferences($param: Param, functionJp: Fu
18
18
  * @returns Array of unique Varref references
19
19
  */
20
20
  export declare function getParamReferences($param: Param, functionJp: FunctionJp): Varref[];
21
+ /**
22
+ * Gets all label statements in the given function that are never referenced
23
+ * @param func The function to analyze
24
+ * @returns An array of unused labels statements
25
+ */
21
26
  export declare function getUnusedLabels(func: FunctionJp): LabelStmt[];
27
+ /**
28
+ * Returns the first function definition matching the given name and file path suffix
29
+ *
30
+ * @param functionName Name of the function
31
+ * @param pathSuffix File path suffix
32
+ * @returns The function definition, or undefined if not found
33
+ */
22
34
  export declare function findFunctionDef(functionName: string, pathSuffix: string): FunctionJp | undefined;
35
+ /**
36
+ * Finds extern declarations for the given function
37
+ * @param functionJp The function join point
38
+ * @returns List of extern function declarations
39
+ */
23
40
  export declare function findExternalFunctionDecl(functionJp: FunctionJp): FunctionJp[];
41
+ /**
42
+ * Checks if the given function is called anywhere in the project
43
+ * @param functionJp The function to evaluate
44
+ * @returns True if the function is used, false otherwise
45
+ */
24
46
  export declare function isFunctionUsed(functionJp: FunctionJp): boolean;
25
47
  //# sourceMappingURL=FunctionUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionUtils.d.ts","sourceRoot":"","sources":["../../src/utils/FunctionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAa,MAAM,EAAE,UAAU,EAA0B,SAAS,EAAmC,MAAM,qCAAqC,CAAC;AAK/J;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAExF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAK1F;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAMlF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,EAAE,CAI7D;AAED,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,0BASvE;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE,CAG7E;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAW9D"}
1
+ {"version":3,"file":"FunctionUtils.d.ts","sourceRoot":"","sources":["../../src/utils/FunctionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAA0B,SAAS,EAAmC,MAAM,qCAAqC,CAAC;AAKpJ;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAExF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAK1F;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAMlF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,EAAE,CAI7D;AAED;;;;;;GAMG;AAEH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,0BASvE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,EAAE,CAG7E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAW9D"}
@@ -32,9 +32,21 @@ export function getParamReferences($param, functionJp) {
32
32
  // Remove duplicated nodes
33
33
  return Array.from(new Map([...directRefs, ...refsInVLAFields].map(ref => [ref.ast, ref])).values());
34
34
  }
35
+ /**
36
+ * Gets all label statements in the given function that are never referenced
37
+ * @param func The function to analyze
38
+ * @returns An array of unused labels statements
39
+ */
35
40
  export function getUnusedLabels(func) {
36
41
  return Query.searchFrom(func, LabelStmt).get().filter(label => Query.searchFrom(func, GotoStmt, { label: jp => jp.astId === label.decl.astId }).get().length === 0);
37
42
  }
43
+ /**
44
+ * Returns the first function definition matching the given name and file path suffix
45
+ *
46
+ * @param functionName Name of the function
47
+ * @param pathSuffix File path suffix
48
+ * @returns The function definition, or undefined if not found
49
+ */
38
50
  export function findFunctionDef(functionName, pathSuffix) {
39
51
  const funcDefs = Query.search(FunctionJp, (func) => {
40
52
  try {
@@ -46,10 +58,20 @@ export function findFunctionDef(functionName, pathSuffix) {
46
58
  }).get();
47
59
  return funcDefs.length > 0 ? funcDefs[0] : undefined;
48
60
  }
61
+ /**
62
+ * Finds extern declarations for the given function
63
+ * @param functionJp The function join point
64
+ * @returns List of extern function declarations
65
+ */
49
66
  export function findExternalFunctionDecl(functionJp) {
50
67
  return functionJp.declarationJps
51
68
  .filter((declJp) => declJp.storageClass === StorageClass.EXTERN);
52
69
  }
70
+ /**
71
+ * Checks if the given function is called anywhere in the project
72
+ * @param functionJp The function to evaluate
73
+ * @returns True if the function is used, false otherwise
74
+ */
53
75
  export function isFunctionUsed(functionJp) {
54
76
  const fileJp = functionJp.getAncestor("file");
55
77
  let referencingFiles;
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionUtils.js","sourceRoot":"","sources":["../../src/utils/FunctionUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FunctionUtils.js","sourceRoot":"","sources":["../../src/utils/FunctionUtils.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,60 @@
1
1
  import { Joinpoint, Vardecl, FunctionJp } from "@specs-feup/clava/api/Joinpoints.js";
2
+ /**
3
+ * Checks if the given joinpoint is an identifier declaration (variable, function, typedef, label, or tag)
4
+ *
5
+ * @param $jp The joinpoint to evaluate
6
+ * @returns True if the join point is an identifier declaration, false otherwise
7
+ */
2
8
  export declare function isIdentifierDecl($jp: Joinpoint): boolean;
9
+ /**
10
+ * Retrieves the name of the given joinpoint
11
+ * @param $jp The joinpoint to evaluate
12
+ * @returns The name of the identifier, or undefined if the join point does not represent an identifier
13
+ */
3
14
  export declare function getIdentifierName($jp: Joinpoint): string | undefined;
15
+ /**
16
+ * Checks if two joinpoints represent different identifiers with the same name
17
+ * @param identifier1 The first joinpoint to evaluate
18
+ * @param identifier2 The second joinpoint to evaluate
19
+ * @returns True if names match and the nodes differ, otherwise returns false
20
+ */
4
21
  export declare function areIdentifierNamesEqual(identifier1: Joinpoint, identifier2: Joinpoint): boolean;
22
+ /**
23
+ * Updates the name of an identifier joinpoint
24
+ * @param $jp The joinpoint to rename
25
+ * @param newName the new identifier name
26
+ * @returns True if renaming was successful, false otherwise
27
+ */
5
28
  export declare function renameIdentifier($jp: Joinpoint, newName: string): boolean;
29
+ /**
30
+ * Checks if a given joinpoint represents an identifier with external linkage
31
+ *
32
+ * @param $jp The joinpoint to evaluate
33
+ * @returns True if the joinpoint has external linkage, false otherwise
34
+ */
6
35
  export declare function isExternalLinkageIdentifier($jp: Joinpoint): boolean;
36
+ /**
37
+ * Checks if a given joinpoint represents an identifier with internal linkage
38
+ *
39
+ * @param $jp The joinpoint to evaluate
40
+ * @returns True if the joinpoint has internal linkage, false otherwise
41
+ */
7
42
  export declare function isInternalLinkageIdentifier($jp: Joinpoint): boolean;
43
+ /**
44
+ * Determines if an identifier is duplicated in a collection of join points
45
+ *
46
+ * @param $jp The identifier to evaluate
47
+ * @param $others Other join points to compare with
48
+ * @returns True if a duplicate exists, false otherwise
49
+ */
8
50
  export declare function isIdentifierDuplicated($jp: Joinpoint, $others: Joinpoint[]): boolean;
51
+ /**
52
+ * Checks if another identifier with the same name is declared before the given joinpoint
53
+ *
54
+ * @param $jp The identifier join point to check
55
+ * @param $others The list of other identifiers to compare with
56
+ * @returns True if a matching identifier is declared earlier, false otherwise.
57
+ */
9
58
  export declare function isIdentifierNameDeclaredBefore($jp: Joinpoint, $others: Joinpoint[]): boolean;
10
59
  /**
11
60
  * @returns Returns true if the identifiers represent different AST nodes but are not distinct within the first 31 characters. Otherwise returns false.
@@ -1 +1 @@
1
- {"version":3,"file":"IdentifierUtils.d.ts","sourceRoot":"","sources":["../../src/utils/IdentifierUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAgB,UAAU,EAAqC,MAAM,qCAAqC,CAAC;AAItI,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAMxD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAOpE;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,WAMrF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAoBzE;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CASnE;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAUnE;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,WAE1E;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,WAIlF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,EAAE,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,CAMtG"}
1
+ {"version":3,"file":"IdentifierUtils.d.ts","sourceRoot":"","sources":["../../src/utils/IdentifierUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAgB,UAAU,EAAqC,MAAM,qCAAqC,CAAC;AAItI;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAMxD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAOpE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,WAMrF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAkBzE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CASnE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAUnE;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,WAE1E;AAED;;;;;;GAMG;AAEH,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,WAIlF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,EAAE,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,CAMtG"}