Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 115 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 6 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ codegen-sdk-analyzer = { path = "codegen-sdk-analyzer" }
codegen-sdk-cst = { path = "codegen-sdk-cst" , features = ["typescript", "javascript", "tsx", "jsx"]}
codegen-sdk-common = { path = "codegen-sdk-common" }
crossbeam = "0.8.4"
env_logger = "0.11.6"
glob = "0.3.2"
env_logger = { workspace = true }
log = { workspace = true }
rayon = "1.10.0"
rayon = { workspace = true}
sysinfo = "0.33.1"
[workspace]
members = [
Expand All @@ -23,12 +23,16 @@ members = [
"codegen-sdk-cst-generator", "codegen-sdk-macros",
]
[workspace.dependencies]
rayon = "1.10.0"
env_logger = "0.11.6"
log = "0.4.25"
ouroboros = "0.18.5"
tree-sitter = "0.25.1"
tree-sitter-python = "0.23.6"
tree-sitter-typescript = "0.23.2"
tree-sitter-javascript = "0.23.1"
tree-sitter-json = "0.24.0"
tree-sitter-java = "0.23.5"
bytes = "1.10.0"
convert_case = "0.7.1"
serde = { version = "1.0.217", features = ["derive"] }
Expand Down
6 changes: 6 additions & 0 deletions codegen-sdk-common/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,13 @@ ouroboros = { workspace = true }
tree-sitter-python = { workspace = true, optional = true }
tree-sitter-typescript = { workspace = true, optional = true }
tree-sitter-javascript = { workspace = true, optional = true }
tree-sitter-json = { workspace = true, optional = true }
tree-sitter-java = { workspace = true, optional = true }
lazy_static = "1.5.0"
thiserror = "2.0.11"
[features]
python = ["dep:tree-sitter-python"]
json = ["dep:tree-sitter-json"]
java = ["dep:tree-sitter-java"]
typescript = ["dep:tree-sitter-typescript", "dep:tree-sitter-javascript"]
all = ["python", "typescript", "json", "java"]
22 changes: 22 additions & 0 deletions codegen-sdk-common/src/errors.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
use thiserror::Error;

#[derive(Debug, Error)]
pub enum ParseError {
#[error("TreeSitter error: {0}")]
TreeSitter(#[from] tree_sitter::LanguageError),
#[error("Unknown Language")]
UnknownLanguage,
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("UTF-8 error: {0}")]
Utf8(#[from] std::string::FromUtf8Error),
#[error("Missing Required Field '{field_name}' in node of type '{parent_node}'")]
MissingNode {
field_name: String,
parent_node: String,
},
#[error("Miscelaneous error")]
Miscelaneous,
#[error("Unexpected Node Type {node_type}")]
UnexpectedNode { node_type: String },
}
17 changes: 12 additions & 5 deletions codegen-sdk-common/src/language.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use tree_sitter::{LanguageError, Parser};

use crate::errors::ParseError;
use tree_sitter::Parser;
pub struct Language {
pub name: &'static str,
pub struct_name: &'static str,
Expand All @@ -8,15 +8,18 @@ pub struct Language {
pub tree_sitter_language: tree_sitter::Language,
}
impl Language {
pub fn parse_tree_sitter(&self, content: &str) -> Result<tree_sitter::Tree, LanguageError> {
pub fn parse_tree_sitter(&self, content: &str) -> Result<tree_sitter::Tree, ParseError> {
let mut parser = Parser::new();
parser.set_language(&self.tree_sitter_language)?;
let tree = parser.parse(content, None).unwrap();
Ok(tree)
parser.parse(content, None).ok_or(ParseError::Miscelaneous)
}
}
#[cfg(feature = "java")]
pub mod java;
#[cfg(feature = "typescript")]
pub mod javascript;
#[cfg(feature = "json")]
pub mod json;
#[cfg(feature = "typescript")]
pub mod jsx;
#[cfg(feature = "python")]
Expand All @@ -37,5 +40,9 @@ lazy_static! {
&jsx::JSX,
#[cfg(feature = "typescript")]
&javascript::Javascript,
#[cfg(feature = "json")]
&json::JSON,
#[cfg(feature = "java")]
&java::Java,
];
}
10 changes: 10 additions & 0 deletions codegen-sdk-common/src/language/java.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
use super::Language;
lazy_static! {
pub static ref Java: Language = Language {
name: "java",
struct_name: "Java",
node_types: tree_sitter_java::NODE_TYPES,
file_extensions: &["java"],
tree_sitter_language: tree_sitter_java::LANGUAGE.into(),
};
}
10 changes: 10 additions & 0 deletions codegen-sdk-common/src/language/json.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
use super::Language;
lazy_static! {
pub static ref JSON: Language = Language {
name: "json",
struct_name: "JSON",
node_types: tree_sitter_json::NODE_TYPES,
file_extensions: &["json"],
tree_sitter_language: tree_sitter_json::LANGUAGE.into(),
};
}
5 changes: 5 additions & 0 deletions codegen-sdk-common/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
mod errors;
pub mod language;
pub mod traits;
pub mod utils;
pub use errors::ParseError;
pub use language::Language;
pub use traits::*;
pub use utils::*;
#[macro_use]
extern crate lazy_static;
5 changes: 3 additions & 2 deletions codegen-sdk-common/src/traits.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
use crate::errors::ParseError;
use bytes::Bytes;
use tree_sitter::{self, Point};
pub trait FromNode {
fn from_node(node: tree_sitter::Node) -> Self;
pub trait FromNode: Sized {
fn from_node(node: tree_sitter::Node) -> Result<Self, ParseError>;
}
pub trait CSTNode: Send {
fn start_byte(&self) -> usize;
Expand Down
Loading