projscan 1.1.1 → 1.2.0

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 (71) hide show
  1. package/README.md +9 -5
  2. package/dist/cli/commands/coverage.js +4 -0
  3. package/dist/cli/commands/coverage.js.map +1 -1
  4. package/dist/cli/commands/prDiff.js +4 -0
  5. package/dist/cli/commands/prDiff.js.map +1 -1
  6. package/dist/core/ast.d.ts +14 -0
  7. package/dist/core/ast.js +30 -8
  8. package/dist/core/ast.js.map +1 -1
  9. package/dist/core/codeGraph.js +68 -3
  10. package/dist/core/codeGraph.js.map +1 -1
  11. package/dist/core/languages/LanguageAdapter.d.ts +1 -1
  12. package/dist/core/languages/csharpAdapter.d.ts +2 -0
  13. package/dist/core/languages/csharpAdapter.js +148 -0
  14. package/dist/core/languages/csharpAdapter.js.map +1 -0
  15. package/dist/core/languages/csharpCallSites.d.ts +22 -0
  16. package/dist/core/languages/csharpCallSites.js +73 -0
  17. package/dist/core/languages/csharpCallSites.js.map +1 -0
  18. package/dist/core/languages/csharpCyclomatic.d.ts +23 -0
  19. package/dist/core/languages/csharpCyclomatic.js +61 -0
  20. package/dist/core/languages/csharpCyclomatic.js.map +1 -0
  21. package/dist/core/languages/csharpExports.d.ts +13 -0
  22. package/dist/core/languages/csharpExports.js +69 -0
  23. package/dist/core/languages/csharpExports.js.map +1 -0
  24. package/dist/core/languages/csharpFunctions.d.ts +24 -0
  25. package/dist/core/languages/csharpFunctions.js +170 -0
  26. package/dist/core/languages/csharpFunctions.js.map +1 -0
  27. package/dist/core/languages/csharpImports.d.ts +30 -0
  28. package/dist/core/languages/csharpImports.js +90 -0
  29. package/dist/core/languages/csharpImports.js.map +1 -0
  30. package/dist/core/languages/goFunctions.js +31 -7
  31. package/dist/core/languages/goFunctions.js.map +1 -1
  32. package/dist/core/languages/javaFunctions.js +12 -5
  33. package/dist/core/languages/javaFunctions.js.map +1 -1
  34. package/dist/core/languages/phpAdapter.d.ts +2 -0
  35. package/dist/core/languages/phpAdapter.js +149 -0
  36. package/dist/core/languages/phpAdapter.js.map +1 -0
  37. package/dist/core/languages/phpCallSites.d.ts +21 -0
  38. package/dist/core/languages/phpCallSites.js +56 -0
  39. package/dist/core/languages/phpCallSites.js.map +1 -0
  40. package/dist/core/languages/phpCyclomatic.d.ts +27 -0
  41. package/dist/core/languages/phpCyclomatic.js +69 -0
  42. package/dist/core/languages/phpCyclomatic.js.map +1 -0
  43. package/dist/core/languages/phpExports.d.ts +13 -0
  44. package/dist/core/languages/phpExports.js +58 -0
  45. package/dist/core/languages/phpExports.js.map +1 -0
  46. package/dist/core/languages/phpFunctions.d.ts +25 -0
  47. package/dist/core/languages/phpFunctions.js +144 -0
  48. package/dist/core/languages/phpFunctions.js.map +1 -0
  49. package/dist/core/languages/phpImports.d.ts +31 -0
  50. package/dist/core/languages/phpImports.js +142 -0
  51. package/dist/core/languages/phpImports.js.map +1 -0
  52. package/dist/core/languages/phpManifests.d.ts +31 -0
  53. package/dist/core/languages/phpManifests.js +89 -0
  54. package/dist/core/languages/phpManifests.js.map +1 -0
  55. package/dist/core/languages/pythonFunctions.js +34 -8
  56. package/dist/core/languages/pythonFunctions.js.map +1 -1
  57. package/dist/core/languages/registry.js +3 -1
  58. package/dist/core/languages/registry.js.map +1 -1
  59. package/dist/core/languages/rubyFunctions.js +37 -5
  60. package/dist/core/languages/rubyFunctions.js.map +1 -1
  61. package/dist/core/languages/rustFunctions.js +44 -8
  62. package/dist/core/languages/rustFunctions.js.map +1 -1
  63. package/dist/core/languages/treeSitterLoader.js +3 -1
  64. package/dist/core/languages/treeSitterLoader.js.map +1 -1
  65. package/dist/grammars/tree-sitter-c_sharp.wasm +0 -0
  66. package/dist/grammars/tree-sitter-php.wasm +0 -0
  67. package/dist/reporters/htmlReporter.d.ts +3 -1
  68. package/dist/reporters/htmlReporter.js +86 -0
  69. package/dist/reporters/htmlReporter.js.map +1 -1
  70. package/dist/tool-manifest.json +2 -2
  71. package/package.json +4 -2
@@ -1 +1 @@
1
- {"version":3,"file":"goFunctions.js","sourceRoot":"","sources":["../../../src/core/languages/goFunctions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"goFunctions.js","sourceRoot":"","sources":["../../../src/core/languages/goFunctions.ts"],"names":[],"mappings":"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"}
@@ -39,18 +39,19 @@ function walk(node, className, out) {
39
39
  const fnName = className ? `${className}.${baseName}` : baseName;
40
40
  const line = node.startPosition.row + 1;
41
41
  const endLine = node.endPosition.row + 1;
42
- const cc = countDecisions(node);
43
- out.push({ name: fnName, line, endLine, cyclomaticComplexity: cc });
42
+ const { cc, callSites } = analyzeBody(node);
43
+ out.push({ name: fnName, line, endLine, cyclomaticComplexity: cc, callSites });
44
44
  return;
45
45
  }
46
46
  for (const child of node.namedChildren)
47
47
  walk(child, className, out);
48
48
  }
49
- function countDecisions(fnNode) {
49
+ function analyzeBody(fnNode) {
50
50
  let count = 0;
51
+ const calls = new Set();
51
52
  const body = fnNode.childForFieldName ? fnNode.childForFieldName('body') : null;
52
53
  if (!body)
53
- return 1;
54
+ return { cc: 1, callSites: [] };
54
55
  walkSkipNested(body, (n) => {
55
56
  if (JAVA_DECISION_NODES.has(n.type)) {
56
57
  count++;
@@ -62,9 +63,15 @@ function countDecisions(fnNode) {
62
63
  }
63
64
  if (n.type === 'binary_expression' && /(\s|^)(\|\||&&)(\s|$)/.test(n.text)) {
64
65
  count++;
66
+ return;
67
+ }
68
+ if (n.type === 'method_invocation') {
69
+ const name = n.childForFieldName ? n.childForFieldName('name') : null;
70
+ if (name)
71
+ calls.add(name.text);
65
72
  }
66
73
  });
67
- return count + 1;
74
+ return { cc: count + 1, callSites: [...calls] };
68
75
  }
69
76
  function walkSkipNested(node, visit) {
70
77
  visit(node);
@@ -1 +1 @@
1
- {"version":3,"file":"javaFunctions.js","sourceRoot":"","sources":["../../../src/core/languages/javaFunctions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"javaFunctions.js","sourceRoot":"","sources":["../../../src/core/languages/javaFunctions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { LanguageAdapter } from './LanguageAdapter.js';
2
+ export declare const phpAdapter: LanguageAdapter;
@@ -0,0 +1,149 @@
1
+ import path from 'node:path';
2
+ import { createParserFor } from './treeSitterLoader.js';
3
+ import { extractPhpImports } from './phpImports.js';
4
+ import { extractPhpExports } from './phpExports.js';
5
+ import { extractPhpCyclomatic } from './phpCyclomatic.js';
6
+ import { extractPhpFunctions } from './phpFunctions.js';
7
+ import { extractPhpCallSites } from './phpCallSites.js';
8
+ import { detectPhpProject } from './phpManifests.js';
9
+ const PHP_EXTENSIONS = new Set(['.php']);
10
+ const MAX_PHP_FILE = 1024 * 1024;
11
+ let parserPromise = null;
12
+ async function getParser() {
13
+ if (!parserPromise)
14
+ parserPromise = createParserFor('tree-sitter-php.wasm');
15
+ return parserPromise;
16
+ }
17
+ export const phpAdapter = {
18
+ id: 'php',
19
+ extensions: PHP_EXTENSIONS,
20
+ sourceExtensions: PHP_EXTENSIONS,
21
+ // PHP has no barrel-file convention.
22
+ barrelBasenames: new Set(),
23
+ maxFileSize: MAX_PHP_FILE,
24
+ async parse(_filePath, content) {
25
+ try {
26
+ const parser = await getParser();
27
+ const tree = parser.parse(content);
28
+ if (!tree || !tree.rootNode) {
29
+ return {
30
+ ok: false,
31
+ reason: 'tree-sitter returned null tree',
32
+ imports: [],
33
+ exports: [],
34
+ callSites: [],
35
+ lineCount: content ? content.split('\n').length : 0,
36
+ cyclomaticComplexity: 0,
37
+ functions: [],
38
+ };
39
+ }
40
+ const root = tree.rootNode;
41
+ const imports = extractPhpImports(root);
42
+ const exports = extractPhpExports(root);
43
+ const cyclomaticComplexity = extractPhpCyclomatic(root);
44
+ const callSites = extractPhpCallSites(root);
45
+ const functions = extractPhpFunctions(root);
46
+ return {
47
+ ok: true,
48
+ imports,
49
+ exports,
50
+ callSites,
51
+ lineCount: content ? content.split('\n').length : 0,
52
+ cyclomaticComplexity,
53
+ functions,
54
+ };
55
+ }
56
+ catch (err) {
57
+ const msg = err instanceof Error ? err.message : String(err);
58
+ return {
59
+ ok: false,
60
+ reason: `php parse failure: ${msg.slice(0, 120)}`,
61
+ imports: [],
62
+ exports: [],
63
+ callSites: [],
64
+ lineCount: content ? content.split('\n').length : 0,
65
+ cyclomaticComplexity: 0,
66
+ functions: [],
67
+ };
68
+ }
69
+ },
70
+ resolveImport(importingFile, source, graphFiles, context) {
71
+ return resolvePhpImport(importingFile, source, graphFiles, context);
72
+ },
73
+ toPackageName(source) {
74
+ if (!source)
75
+ return null;
76
+ // Relative include paths (./, ../, /) are local; resolveImport handles them.
77
+ if (source.startsWith('./') || source.startsWith('../') || source.startsWith('/'))
78
+ return null;
79
+ if (source.includes('.php'))
80
+ return null; // bare include path with extension
81
+ // Namespace import: take the first segment as the "package". Composer
82
+ // package names are vendor/name; we approximate by taking the top namespace.
83
+ return source.split('\\')[0];
84
+ },
85
+ async preparePackageRoots(rootPath, files) {
86
+ const info = await detectPhpProject(rootPath, files);
87
+ if (!info)
88
+ return { packageRoots: [], meta: undefined };
89
+ const projectRel = path.relative(rootPath, info.projectRoot) || '.';
90
+ return {
91
+ packageRoots: [projectRel],
92
+ meta: { phpProject: info },
93
+ };
94
+ },
95
+ };
96
+ /**
97
+ * Resolve a PHP import to a repo-local file or null.
98
+ *
99
+ * Two import shapes:
100
+ * 1. Namespace use: `use Foo\Bar\Baz;` — match the longest PSR-4 prefix
101
+ * from composer.json autoload, replace it with the prefix's source
102
+ * root, append the remaining segments as directories, append `.php`.
103
+ * Example with `psr-4: { "App\\": "src" }`:
104
+ * "App\\Models\\User" → src/Models/User.php
105
+ * 2. Include path: `require 'path/to/file.php';` — relative to the
106
+ * including file's directory; literal probe.
107
+ */
108
+ function resolvePhpImport(importingFile, source, graphFiles, context) {
109
+ if (!source)
110
+ return null;
111
+ // Include-path form (literal `.php` filename).
112
+ if (source.endsWith('.php') || source.startsWith('./') || source.startsWith('../') || source.startsWith('/')) {
113
+ const importingDir = path.posix.dirname(importingFile);
114
+ const stripped = source.startsWith('/') ? source.slice(1) : source;
115
+ const joined = path.posix.normalize(path.posix.join(importingDir, stripped));
116
+ if (graphFiles.has(joined))
117
+ return joined;
118
+ return null;
119
+ }
120
+ // Namespace use form. Resolve via PSR-4 if we have a Composer project.
121
+ const project = context.meta?.phpProject;
122
+ if (!project || project.psr4.length === 0)
123
+ return null;
124
+ // Composer namespaces use `\` as the separator; in JSON the convention is
125
+ // `\\` (escaped). The grammar's qualified_name preserves single
126
+ // backslashes. We compare against composer.json prefixes that are also
127
+ // single-backslash because we already json-parsed them.
128
+ for (const { prefix, root } of project.psr4) {
129
+ if (source === prefix.replace(/\\$/, '')) {
130
+ // Exact namespace - usually doesn't resolve to a file, but try
131
+ // <root>/<index>.php as a courtesy.
132
+ continue;
133
+ }
134
+ if (source.startsWith(prefix)) {
135
+ const remainder = source.slice(prefix.length);
136
+ const segments = remainder.split('\\').filter(Boolean);
137
+ // Build the candidate. The composer root path is relative to the
138
+ // project root; the project root is the first packageRoot.
139
+ const projectRel = (context.packageRoots ?? ['.'])[0] ?? '.';
140
+ const projectSegs = projectRel === '.' || projectRel === '' ? [] : projectRel.split('/').filter(Boolean);
141
+ const rootSegs = root.split('/').filter(Boolean);
142
+ const candidate = [...projectSegs, ...rootSegs, ...segments].join('/') + '.php';
143
+ if (graphFiles.has(candidate))
144
+ return candidate;
145
+ }
146
+ }
147
+ return null;
148
+ }
149
+ //# sourceMappingURL=phpAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phpAdapter.js","sourceRoot":"","sources":["../../../src/core/languages/phpAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ interface TsNode {
2
+ type: string;
3
+ text: string;
4
+ namedChildren: TsNode[];
5
+ childForFieldName?: (name: string) => TsNode | null;
6
+ }
7
+ /**
8
+ * Extract called-function names from PHP. Three call shapes, all surfaced
9
+ * as a deduplicated list of bare identifiers (mirrors the JS / Python /
10
+ * Go / Java / Ruby / Rust adapters):
11
+ *
12
+ * function_call_expression foo(args) → "foo"
13
+ * member_call_expression $obj->method(args) → "method"
14
+ * scoped_call_expression Foo::method(args) → "method"
15
+ * nullsafe_member_call_expression $obj?->method() → "method"
16
+ *
17
+ * `require` / `include` family are NOT call expressions in tree-sitter-php
18
+ * (they're their own expression kinds); we already handle those as imports.
19
+ */
20
+ export declare function extractPhpCallSites(root: TsNode): string[];
21
+ export {};
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Extract called-function names from PHP. Three call shapes, all surfaced
3
+ * as a deduplicated list of bare identifiers (mirrors the JS / Python /
4
+ * Go / Java / Ruby / Rust adapters):
5
+ *
6
+ * function_call_expression foo(args) → "foo"
7
+ * member_call_expression $obj->method(args) → "method"
8
+ * scoped_call_expression Foo::method(args) → "method"
9
+ * nullsafe_member_call_expression $obj?->method() → "method"
10
+ *
11
+ * `require` / `include` family are NOT call expressions in tree-sitter-php
12
+ * (they're their own expression kinds); we already handle those as imports.
13
+ */
14
+ export function extractPhpCallSites(root) {
15
+ const seen = new Set();
16
+ walk(root, (n) => {
17
+ let name = null;
18
+ if (n.type === 'function_call_expression') {
19
+ name = nameOf(n.childForFieldName ? n.childForFieldName('function') : null);
20
+ }
21
+ else if (n.type === 'member_call_expression' ||
22
+ n.type === 'nullsafe_member_call_expression' ||
23
+ n.type === 'scoped_call_expression') {
24
+ name = nameOf(n.childForFieldName ? n.childForFieldName('name') : null);
25
+ }
26
+ if (name)
27
+ seen.add(name);
28
+ });
29
+ return [...seen];
30
+ }
31
+ function nameOf(node) {
32
+ if (!node)
33
+ return null;
34
+ switch (node.type) {
35
+ case 'name':
36
+ case 'variable_name':
37
+ return node.text.replace(/^\$/, '');
38
+ case 'qualified_name': {
39
+ // Take the last segment.
40
+ let last = null;
41
+ for (const c of node.namedChildren) {
42
+ if (c.type === 'name')
43
+ last = c;
44
+ }
45
+ return last ? last.text : null;
46
+ }
47
+ default:
48
+ return null;
49
+ }
50
+ }
51
+ function walk(node, visit) {
52
+ visit(node);
53
+ for (const child of node.namedChildren)
54
+ walk(child, visit);
55
+ }
56
+ //# sourceMappingURL=phpCallSites.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phpCallSites.js","sourceRoot":"","sources":["../../../src/core/languages/phpCallSites.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;QACf,IAAI,IAAI,GAAkB,IAAI,CAAC;QAC/B,IAAI,CAAC,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;YAC1C,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9E,CAAC;aAAM,IACL,CAAC,CAAC,IAAI,KAAK,wBAAwB;YACnC,CAAC,CAAC,IAAI,KAAK,iCAAiC;YAC5C,CAAC,CAAC,IAAI,KAAK,wBAAwB,EACnC,CAAC;YACD,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,IAAI;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,MAAM,CAAC,IAAmB;IACjC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC;QACZ,KAAK,eAAe;YAClB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACtC,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,yBAAyB;YACzB,IAAI,IAAI,GAAkB,IAAI,CAAC;YAC/B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;oBAAE,IAAI,GAAG,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACjC,CAAC;QACD;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAC,IAAY,EAAE,KAA0B;IACpD,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa;QAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,27 @@
1
+ interface TsNode {
2
+ type: string;
3
+ text: string;
4
+ namedChildren: TsNode[];
5
+ }
6
+ /**
7
+ * File-level McCabe cyclomatic complexity for tree-sitter-php.
8
+ *
9
+ * Decision points:
10
+ * if_statement +1
11
+ * else_if_clause / elseif_clause +1 each (the `else` does NOT count)
12
+ * for_statement / foreach_statement +1 each
13
+ * while_statement / do_statement +1 each
14
+ * case_statement / match_condition_list +1 per non-default arm (default does NOT count)
15
+ * catch_clause +1 each
16
+ * conditional_expression (ternary `?:`) +1
17
+ * binary_expression with `&&` / `||` +1 each
18
+ * binary_expression with `??` (null coalesce) +1
19
+ * `and` / `or` word operators +1 each (text-detected; binary_expression doesn't
20
+ * distinguish them from `&&` / `||` at the node-type
21
+ * level)
22
+ *
23
+ * Hat tip to existing analyzers (eslint, phpmetrics) that follow these
24
+ * conventions; we match them so our scores read like everyone else's.
25
+ */
26
+ export declare function extractPhpCyclomatic(root: TsNode): number;
27
+ export {};
@@ -0,0 +1,69 @@
1
+ /**
2
+ * File-level McCabe cyclomatic complexity for tree-sitter-php.
3
+ *
4
+ * Decision points:
5
+ * if_statement +1
6
+ * else_if_clause / elseif_clause +1 each (the `else` does NOT count)
7
+ * for_statement / foreach_statement +1 each
8
+ * while_statement / do_statement +1 each
9
+ * case_statement / match_condition_list +1 per non-default arm (default does NOT count)
10
+ * catch_clause +1 each
11
+ * conditional_expression (ternary `?:`) +1
12
+ * binary_expression with `&&` / `||` +1 each
13
+ * binary_expression with `??` (null coalesce) +1
14
+ * `and` / `or` word operators +1 each (text-detected; binary_expression doesn't
15
+ * distinguish them from `&&` / `||` at the node-type
16
+ * level)
17
+ *
18
+ * Hat tip to existing analyzers (eslint, phpmetrics) that follow these
19
+ * conventions; we match them so our scores read like everyone else's.
20
+ */
21
+ export function extractPhpCyclomatic(root) {
22
+ let decisions = 0;
23
+ walk(root, (n) => {
24
+ if (isDecisionPoint(n))
25
+ decisions++;
26
+ });
27
+ return decisions + 1;
28
+ }
29
+ function isDecisionPoint(n) {
30
+ switch (n.type) {
31
+ case 'if_statement':
32
+ case 'else_if_clause':
33
+ case 'elseif_clause':
34
+ case 'for_statement':
35
+ case 'foreach_statement':
36
+ case 'while_statement':
37
+ case 'do_statement':
38
+ case 'catch_clause':
39
+ case 'conditional_expression':
40
+ return true;
41
+ case 'case_statement': {
42
+ // `default:` is the fallthrough, not a branch.
43
+ return !/^\s*default\b/.test(n.text);
44
+ }
45
+ case 'match_condition_list': {
46
+ // Each match condition list is one arm of a `match { ... }`. Arms
47
+ // matching anything but `default` count.
48
+ return !/^\s*default\b/.test(n.text);
49
+ }
50
+ case 'binary_expression': {
51
+ const t = n.text;
52
+ // PHP supports both symbolic (`&&`, `||`, `??`) and word (`and`, `or`)
53
+ // boolean operators. Match each occurrence at most once per node.
54
+ if (/(\s|^)(\|\||&&|\?\?)(\s|$)/.test(t))
55
+ return true;
56
+ if (/\b(and|or)\b/.test(t))
57
+ return true;
58
+ return false;
59
+ }
60
+ default:
61
+ return false;
62
+ }
63
+ }
64
+ function walk(node, visit) {
65
+ visit(node);
66
+ for (const child of node.namedChildren)
67
+ walk(child, visit);
68
+ }
69
+ //# sourceMappingURL=phpCyclomatic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phpCyclomatic.js","sourceRoot":"","sources":["../../../src/core/languages/phpCyclomatic.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;QACf,IAAI,eAAe,CAAC,CAAC,CAAC;YAAE,SAAS,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,eAAe,CAAC,CAAS;IAChC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,cAAc,CAAC;QACpB,KAAK,gBAAgB,CAAC;QACtB,KAAK,eAAe,CAAC;QACrB,KAAK,eAAe,CAAC;QACrB,KAAK,mBAAmB,CAAC;QACzB,KAAK,iBAAiB,CAAC;QACvB,KAAK,cAAc,CAAC;QACpB,KAAK,cAAc,CAAC;QACpB,KAAK,wBAAwB;YAC3B,OAAO,IAAI,CAAC;QACd,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,+CAA+C;YAC/C,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;YAC5B,kEAAkE;YAClE,yCAAyC;YACzC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACjB,uEAAuE;YACvE,kEAAkE;YAClE,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACtD,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACxC,OAAO,KAAK,CAAC;QACf,CAAC;QACD;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAC,IAAY,EAAE,KAA0B;IACpD,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa;QAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { AstExport } from '../ast.js';
2
+ interface TsNode {
3
+ type: string;
4
+ text: string;
5
+ startPosition: {
6
+ row: number;
7
+ column: number;
8
+ };
9
+ namedChildren: TsNode[];
10
+ childForFieldName?: (name: string) => TsNode | null;
11
+ }
12
+ export declare function extractPhpExports(root: TsNode): AstExport[];
13
+ export {};
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Top-level PHP declarations are always public to anything that imports the
3
+ * file's namespace via `use` — there's no `private` modifier at the file /
4
+ * namespace scope (only inside classes). So all top-level
5
+ * function_definition / class_declaration / interface_declaration /
6
+ * trait_declaration / enum_declaration nodes count as exports.
7
+ *
8
+ * Method-level visibility is enforced inside `phpFunctions.ts` (where
9
+ * we surface per-method CC); it doesn't matter at the file-export level.
10
+ */
11
+ const TOP_LEVEL_EXPORTS = {
12
+ function_definition: 'function',
13
+ class_declaration: 'class',
14
+ interface_declaration: 'interface',
15
+ trait_declaration: 'class',
16
+ enum_declaration: 'enum',
17
+ };
18
+ export function extractPhpExports(root) {
19
+ const exports = [];
20
+ // Only walk top-level (program -> direct children). Nested classes are
21
+ // method-level and addressed by phpFunctions, not file exports.
22
+ for (const child of root.namedChildren) {
23
+ visit(child, exports, /* depth */ 0);
24
+ }
25
+ return exports;
26
+ }
27
+ function visit(node, out, depth) {
28
+ const kind = TOP_LEVEL_EXPORTS[node.type];
29
+ if (kind && depth === 0) {
30
+ const name = nameOf(node);
31
+ if (name) {
32
+ out.push({ name, kind, typeOnly: false, line: node.startPosition.row + 1 });
33
+ }
34
+ return;
35
+ }
36
+ // namespace_definition wraps further declarations; descend with the same
37
+ // depth so we still classify its top-level children as exports.
38
+ if (node.type === 'namespace_definition') {
39
+ const body = node.namedChildren.find((c) => c.type === 'declaration_list' || c.type === 'compound_statement');
40
+ if (body) {
41
+ for (const c of body.namedChildren)
42
+ visit(c, out, depth);
43
+ }
44
+ }
45
+ }
46
+ function nameOf(node) {
47
+ if (node.childForFieldName) {
48
+ const id = node.childForFieldName('name');
49
+ if (id)
50
+ return id.text;
51
+ }
52
+ for (const c of node.namedChildren) {
53
+ if (c.type === 'name')
54
+ return c.text;
55
+ }
56
+ return null;
57
+ }
58
+ //# sourceMappingURL=phpExports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phpExports.js","sourceRoot":"","sources":["../../../src/core/languages/phpExports.ts"],"names":[],"mappings":"AAUA;;;;;;;;;GASG;AACH,MAAM,iBAAiB,GAA+B;IACpD,mBAAmB,EAAE,UAAU;IAC/B,iBAAiB,EAAE,OAAO;IAC1B,qBAAqB,EAAE,WAAW;IAClC,iBAAiB,EAAE,OAAO;IAC1B,gBAAgB,EAAE,MAAM;CACzB,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,uEAAuE;IACvE,gEAAgE;IAChE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,KAAK,CAAC,IAAY,EAAE,GAAgB,EAAE,KAAa;IAC1D,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,IAAI,EAAE,CAAC;YACT,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO;IACT,CAAC;IACD,yEAAyE;IACzE,gEAAgE;IAChE,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,IAAI,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAC;QAC9G,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa;gBAAE,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC,IAAI,CAAC;IACzB,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { FunctionInfo } from '../ast.js';
2
+ interface TsNode {
3
+ type: string;
4
+ text: string;
5
+ startPosition: {
6
+ row: number;
7
+ column: number;
8
+ };
9
+ endPosition: {
10
+ row: number;
11
+ column: number;
12
+ };
13
+ namedChildren: TsNode[];
14
+ childForFieldName?: (name: string) => TsNode | null;
15
+ }
16
+ /**
17
+ * Per-function McCabe CC for PHP. Walks `function_definition` (free
18
+ * functions) and `method_declaration` nodes. Methods inside `class Foo`
19
+ * are named `Foo.method`; methods in interfaces/traits/enums use the
20
+ * declaring type's name. Anonymous functions and closures are not
21
+ * extracted as separate functions; their CC folds into the enclosing
22
+ * function.
23
+ */
24
+ export declare function extractPhpFunctions(root: TsNode): FunctionInfo[];
25
+ export {};