mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Support syntax highlighting of arguments in the devtools console (#34810)
* Implement Builder struct for console messages Signed-off-by: Simon Wülker <simon.wuelker@arcor.de> * Support integer arguments for console methods Signed-off-by: Simon Wülker <simon.wuelker@arcor.de> * Support floating point arguments to console methods in devtools Signed-off-by: Simon Wülker <simon.wuelker@arcor.de> * Fix warnings Signed-off-by: Simon Wülker <simon.wuelker@arcor.de> * Tidy Signed-off-by: Simon Wülker <simon.wuelker@arcor.de> --------- Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
This commit is contained in:
parent
7c023ee02a
commit
b252f238d1
4 changed files with 242 additions and 95 deletions
|
@ -12,7 +12,7 @@
|
|||
|
||||
use std::collections::HashMap;
|
||||
use std::net::TcpStream;
|
||||
use std::time::{Duration, SystemTime};
|
||||
use std::time::{Duration, SystemTime, UNIX_EPOCH};
|
||||
|
||||
use base::cross_process_instant::CrossProcessInstant;
|
||||
use base::id::{BrowsingContextId, PipelineId};
|
||||
|
@ -283,15 +283,23 @@ pub enum LogLevel {
|
|||
Trace,
|
||||
}
|
||||
|
||||
/// A console message as it is sent from script to the constellation
|
||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct ConsoleMessage {
|
||||
pub message: String,
|
||||
pub log_level: LogLevel,
|
||||
pub filename: String,
|
||||
pub line_number: usize,
|
||||
pub column_number: usize,
|
||||
pub stacktrace: Vec<StackFrame>,
|
||||
pub arguments: Vec<ConsoleMessageArgument>,
|
||||
pub stacktrace: Option<Vec<StackFrame>>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
pub enum ConsoleMessageArgument {
|
||||
String(String),
|
||||
Integer(i32),
|
||||
Number(f64),
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
|
@ -335,6 +343,7 @@ pub struct PageError {
|
|||
pub private: bool,
|
||||
}
|
||||
|
||||
/// Represents a console message as it is sent to the devtools
|
||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
pub struct ConsoleLog {
|
||||
pub level: String,
|
||||
|
@ -342,8 +351,39 @@ pub struct ConsoleLog {
|
|||
pub line_number: u32,
|
||||
pub column_number: u32,
|
||||
pub time_stamp: u64,
|
||||
pub arguments: Vec<String>,
|
||||
pub stacktrace: Vec<StackFrame>,
|
||||
pub arguments: Vec<ConsoleArgument>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub stacktrace: Option<Vec<StackFrame>>,
|
||||
}
|
||||
|
||||
impl From<ConsoleMessage> for ConsoleLog {
|
||||
fn from(value: ConsoleMessage) -> Self {
|
||||
let level = match value.log_level {
|
||||
LogLevel::Debug => "debug",
|
||||
LogLevel::Info => "info",
|
||||
LogLevel::Warn => "warn",
|
||||
LogLevel::Error => "error",
|
||||
LogLevel::Clear => "clear",
|
||||
LogLevel::Trace => "trace",
|
||||
LogLevel::Log => "log",
|
||||
}
|
||||
.to_owned();
|
||||
|
||||
let time_stamp = SystemTime::now()
|
||||
.duration_since(UNIX_EPOCH)
|
||||
.unwrap_or_default()
|
||||
.as_millis() as u64;
|
||||
|
||||
Self {
|
||||
level,
|
||||
filename: value.filename,
|
||||
line_number: value.line_number as u32,
|
||||
column_number: value.column_number as u32,
|
||||
time_stamp,
|
||||
arguments: value.arguments.into_iter().map(|arg| arg.into()).collect(),
|
||||
stacktrace: value.stacktrace,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize)]
|
||||
|
@ -412,3 +452,70 @@ pub struct CssDatabaseProperty {
|
|||
pub supports: Vec<String>,
|
||||
pub subproperties: Vec<String>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
#[serde(untagged)]
|
||||
pub enum ConsoleArgument {
|
||||
String(String),
|
||||
Integer(i32),
|
||||
Number(f64),
|
||||
}
|
||||
|
||||
impl From<ConsoleMessageArgument> for ConsoleArgument {
|
||||
fn from(value: ConsoleMessageArgument) -> Self {
|
||||
match value {
|
||||
ConsoleMessageArgument::String(string) => Self::String(string),
|
||||
ConsoleMessageArgument::Integer(integer) => Self::Integer(integer),
|
||||
ConsoleMessageArgument::Number(number) => Self::Number(number),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<String> for ConsoleMessageArgument {
|
||||
fn from(value: String) -> Self {
|
||||
Self::String(value)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct ConsoleMessageBuilder {
|
||||
level: LogLevel,
|
||||
filename: String,
|
||||
line_number: u32,
|
||||
column_number: u32,
|
||||
arguments: Vec<ConsoleMessageArgument>,
|
||||
stack_trace: Option<Vec<StackFrame>>,
|
||||
}
|
||||
|
||||
impl ConsoleMessageBuilder {
|
||||
pub fn new(level: LogLevel, filename: String, line_number: u32, column_number: u32) -> Self {
|
||||
Self {
|
||||
level,
|
||||
filename,
|
||||
line_number,
|
||||
column_number,
|
||||
arguments: vec![],
|
||||
stack_trace: None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn attach_stack_trace(&mut self, stack_trace: Vec<StackFrame>) -> &mut Self {
|
||||
self.stack_trace = Some(stack_trace);
|
||||
self
|
||||
}
|
||||
|
||||
pub fn add_argument(&mut self, argument: ConsoleMessageArgument) -> &mut Self {
|
||||
self.arguments.push(argument);
|
||||
self
|
||||
}
|
||||
|
||||
pub fn finish(self) -> ConsoleMessage {
|
||||
ConsoleMessage {
|
||||
log_level: self.level,
|
||||
filename: self.filename,
|
||||
line_number: self.line_number as usize,
|
||||
column_number: self.column_number as usize,
|
||||
arguments: self.arguments,
|
||||
stacktrace: self.stack_trace,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue