Adds ArkTS (.ets, HarmonyOS/OpenHarmony) as a first-class language: full TypeScript-grade extraction via the harmony-contrib tree-sitter grammar (MIT, vendored byte-identical from the tree-sitter-arkts 0.2.0 npm tarball), plus the ArkUI constructs that make HarmonyOS apps traceable: - @Component/@ComponentV2 structs with decorators from both grammar positions; members extract as class members with qualified names. - build() component trees: child instantiation edges via arkui_component_expression, no synthesizer needed. - Attribute chains emitted dot-prefixed and resolved ONLY against @Extend/@Styles/@AnimatableExtend/@Builder helpers (unique-or-drop) — bare-name fallthrough produced 36,840 wrong edges (17% of calls) on the OpenHarmony samples monorepo. All four grammar chain shapes handled, including the detached-chain forms. - .onClick(this.handler) method-reference bindings. - ohpm workspace modules: bare imports follow oh-package.json5 file: deps (ambiguous names dropped), honoring each module's main entry — which also lets .ts consumers resolve .ets modules. - ArkUI dynamic-dispatch bridges, all provenance:'heuristic' with wiring-site metadata: assignment-gated state->build() re-render (V1 @State family + V2 @Local/@Provider/@Consumer), @ohos.events.emitter emit->subscriber pairing on static event keys (numeric ids same-file, named constants same-module, fan-out capped), and router.pushUrl literal urls -> the target page's @Entry struct. - $r/$rawfile resource intrinsics treated as built-ins; arkts joins the web language family, value-reference edges, re-export chase, and the other TS-applicable gates. Also ships a language-agnostic index-completeness guard: indexAll stamps index_state (indexing -> complete/partial/failed), reconciles discovered vs accounted files (a loaded run silently dropped 37 files), and codegraph status surfaces truncated/partial indexes in human and --json output. Validated on HarmoneyOpenEye (82 files), CoolMallArkTS (528, modular ohpm + ArkUI V2), and openharmony/applications_app_samples (11,693 files, 202,890 nodes stable across re-index, attribute false-positive audit 36,840 -> 588 residual all-plausible). Supersedes PRs #656 and #988 with credit — both informed this implementation. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
71 lines
2.2 KiB
TypeScript
71 lines
2.2 KiB
TypeScript
/**
|
|
* Per-language extraction configurations.
|
|
*
|
|
* Each file exports a LanguageExtractor config object.
|
|
* This barrel builds the EXTRACTORS map consumed by TreeSitterExtractor.
|
|
*/
|
|
|
|
import { Language } from '../../types';
|
|
import type { LanguageExtractor } from '../tree-sitter-types';
|
|
|
|
import { typescriptExtractor } from './typescript';
|
|
import { javascriptExtractor } from './javascript';
|
|
import { pythonExtractor } from './python';
|
|
import { goExtractor } from './go';
|
|
import { rustExtractor } from './rust';
|
|
import { javaExtractor } from './java';
|
|
import { cExtractor, cppExtractor } from './c-cpp';
|
|
import { csharpExtractor } from './csharp';
|
|
import { phpExtractor } from './php';
|
|
import { rubyExtractor } from './ruby';
|
|
import { swiftExtractor } from './swift';
|
|
import { kotlinExtractor } from './kotlin';
|
|
import { dartExtractor } from './dart';
|
|
import { pascalExtractor } from './pascal';
|
|
import { scalaExtractor } from './scala';
|
|
import { luaExtractor } from './lua';
|
|
import { rExtractor } from './r';
|
|
import { luauExtractor } from './luau';
|
|
import { objcExtractor } from './objc';
|
|
import { cfscriptExtractor } from './cfscript';
|
|
import { cfqueryExtractor } from './cfquery';
|
|
import { cobolExtractor } from './cobol';
|
|
import { vbnetExtractor } from './vbnet';
|
|
import { erlangExtractor } from './erlang';
|
|
import { solidityExtractor } from './solidity';
|
|
import { terraformExtractor } from './terraform';
|
|
import { arktsExtractor } from './arkts';
|
|
|
|
export const EXTRACTORS: Partial<Record<Language, LanguageExtractor>> = {
|
|
typescript: typescriptExtractor,
|
|
tsx: typescriptExtractor,
|
|
javascript: javascriptExtractor,
|
|
jsx: javascriptExtractor,
|
|
python: pythonExtractor,
|
|
go: goExtractor,
|
|
rust: rustExtractor,
|
|
java: javaExtractor,
|
|
c: cExtractor,
|
|
cpp: cppExtractor,
|
|
csharp: csharpExtractor,
|
|
php: phpExtractor,
|
|
ruby: rubyExtractor,
|
|
swift: swiftExtractor,
|
|
kotlin: kotlinExtractor,
|
|
dart: dartExtractor,
|
|
pascal: pascalExtractor,
|
|
scala: scalaExtractor,
|
|
lua: luaExtractor,
|
|
r: rExtractor,
|
|
luau: luauExtractor,
|
|
objc: objcExtractor,
|
|
cfscript: cfscriptExtractor,
|
|
cfquery: cfqueryExtractor,
|
|
cobol: cobolExtractor,
|
|
vbnet: vbnetExtractor,
|
|
erlang: erlangExtractor,
|
|
solidity: solidityExtractor,
|
|
terraform: terraformExtractor,
|
|
arkts: arktsExtractor,
|
|
};
|