Skip to content

Commit cd3c9cc

Browse files
authored
Merge pull request #109 from syncable-dev/develop
Develop
2 parents b524dac + 94f3afd commit cd3c9cc

30 files changed

Lines changed: 2243 additions & 2519 deletions

Cargo.lock

Lines changed: 97 additions & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/analyzer/context/analysis.rs

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
use crate::analyzer::{
2+
AnalysisConfig, BuildScript, DetectedLanguage, DetectedTechnology, EntryPoint, EnvVar, Port,
3+
ProjectType,
4+
};
5+
use crate::error::Result;
6+
use std::collections::{HashMap, HashSet};
7+
use std::path::Path;
8+
9+
use super::file_analyzers::{docker, env, makefile};
10+
use super::language_analyzers::{go, javascript, jvm, python, rust};
11+
use super::microservices;
12+
use super::project_type;
13+
use super::tech_specific;
14+
15+
/// Project context information
16+
pub struct ProjectContext {
17+
pub entry_points: Vec<EntryPoint>,
18+
pub ports: Vec<Port>,
19+
pub environment_variables: Vec<EnvVar>,
20+
pub project_type: ProjectType,
21+
pub build_scripts: Vec<BuildScript>,
22+
}
23+
24+
/// Analyzes project context including entry points, ports, and environment variables
25+
pub fn analyze_context(
26+
project_root: &Path,
27+
languages: &[DetectedLanguage],
28+
technologies: &[DetectedTechnology],
29+
config: &AnalysisConfig,
30+
) -> Result<ProjectContext> {
31+
log::info!("Analyzing project context");
32+
33+
let mut entry_points = Vec::new();
34+
let mut ports = HashSet::new();
35+
let mut env_vars = HashMap::new();
36+
let mut build_scripts = Vec::new();
37+
38+
// Analyze based on detected languages
39+
for language in languages {
40+
match language.name.as_str() {
41+
"JavaScript" | "TypeScript" => {
42+
javascript::analyze_node_project(project_root, &mut entry_points, &mut ports, &mut env_vars, &mut build_scripts, config)?;
43+
}
44+
"Python" => {
45+
python::analyze_python_project(project_root, &mut entry_points, &mut ports, &mut env_vars, &mut build_scripts, config)?;
46+
}
47+
"Rust" => {
48+
rust::analyze_rust_project(project_root, &mut entry_points, &mut ports, &mut env_vars, &mut build_scripts, config)?;
49+
}
50+
"Go" => {
51+
go::analyze_go_project(project_root, &mut entry_points, &mut ports, &mut env_vars, &mut build_scripts, config)?;
52+
}
53+
"Java" | "Kotlin" => {
54+
jvm::analyze_jvm_project(project_root, &mut ports, &mut env_vars, &mut build_scripts, config)?;
55+
}
56+
_ => {}
57+
}
58+
}
59+
60+
// Analyze common configuration files
61+
docker::analyze_docker_files(project_root, &mut ports, &mut env_vars)?;
62+
env::analyze_env_files(project_root, &mut env_vars)?;
63+
makefile::analyze_makefile(project_root, &mut build_scripts)?;
64+
65+
// Technology-specific analysis
66+
for technology in technologies {
67+
tech_specific::analyze_technology_specifics(technology, project_root, &mut entry_points, &mut ports)?;
68+
}
69+
70+
// Detect microservices structure
71+
let microservices = microservices::detect_microservices_structure(project_root)?;
72+
73+
// Determine project type
74+
let ports_vec: Vec<Port> = ports.iter().cloned().collect();
75+
let project_type = project_type::determine_project_type_with_structure(
76+
languages,
77+
technologies,
78+
&entry_points,
79+
&ports_vec,
80+
&microservices,
81+
);
82+
83+
// Convert collections to vectors
84+
let ports: Vec<Port> = ports.into_iter().collect();
85+
let environment_variables: Vec<EnvVar> = env_vars
86+
.into_iter()
87+
.map(|(name, (default, required, desc))| EnvVar {
88+
name,
89+
default_value: default,
90+
required,
91+
description: desc,
92+
})
93+
.collect();
94+
95+
Ok(ProjectContext {
96+
entry_points,
97+
ports,
98+
environment_variables,
99+
project_type,
100+
build_scripts,
101+
})
102+
}

0 commit comments

Comments
 (0)