// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. use serde::Serialize; use swc_common; #[derive(Debug, PartialEq, Serialize, Clone)] #[serde(rename_all = "camelCase")] pub enum DocNodeKind { Function, Variable, Class, Enum, Interface, TypeAlias, Namespace, } #[derive(Debug, Serialize, Clone)] #[serde(rename_all = "camelCase")] pub struct ParamDef { pub name: String, pub ts_type: Option, } #[derive(Debug, Serialize, Clone)] pub struct Location { pub filename: String, pub line: usize, pub col: usize, } impl Into for swc_common::Loc { fn into(self) -> Location { use swc_common::FileName::*; let filename = match &self.file.name { Real(path_buf) => path_buf.to_string_lossy().to_string(), Custom(str_) => str_.to_string(), _ => panic!("invalid filename"), }; Location { filename, line: self.line, col: self.col_display, } } } #[derive(Debug, Serialize, Clone)] #[serde(rename_all = "camelCase")] pub struct DocNode { pub kind: DocNodeKind, pub name: String, pub location: Location, pub js_doc: Option, #[serde(skip_serializing_if = "Option::is_none")] pub function_def: Option, #[serde(skip_serializing_if = "Option::is_none")] pub variable_def: Option, #[serde(skip_serializing_if = "Option::is_none")] pub enum_def: Option, #[serde(skip_serializing_if = "Option::is_none")] pub class_def: Option, #[serde(skip_serializing_if = "Option::is_none")] pub type_alias_def: Option, #[serde(skip_serializing_if = "Option::is_none")] pub namespace_def: Option, #[serde(skip_serializing_if = "Option::is_none")] pub interface_def: Option, }