Skip to content

Commit

Permalink
feat: add comments in module code generation (web-infra-dev#2893)
Browse files Browse the repository at this point in the history
* feat: add comments in module code generation

* feat: add builtins.codeGeneration.keepComments

* chore: update
  • Loading branch information
faga295 authored Apr 26, 2023
1 parent 5b33c94 commit e764de6
Show file tree
Hide file tree
Showing 11 changed files with 440 additions and 347 deletions.
5 changes: 5 additions & 0 deletions .changeset/five-icons-vanish.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@rspack/binding": patch
---

add comments when module code generation
4 changes: 4 additions & 0 deletions crates/node_binding/binding.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,9 @@ export interface RawPresetEnv {
mode?: 'usage' | 'entry'
coreJs?: string
}
export interface RawCodeGeneration {
keepComments: boolean
}
export interface RawBuiltins {
html?: Array<RawHtmlPluginConfig>
css?: RawCssPluginConfig
Expand All @@ -162,6 +165,7 @@ export interface RawBuiltins {
banner?: Array<RawBannerConfig>
pluginImport?: Array<RawPluginImportConfig>
relay?: RawRelayConfig
codeGeneration?: RawCodeGeneration
}
export interface RawCacheOptions {
type: string
Expand Down
18 changes: 17 additions & 1 deletion crates/rspack_binding_options/src/options/raw_builtins/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use napi_derive::napi;
use rspack_core::{Builtins, Define, Minification, PluginExt, PresetEnv, Provide};
use rspack_core::{Builtins, CodeGeneration, Define, Minification, PluginExt, PresetEnv, Provide};
use rspack_error::internal_error;
use rspack_plugin_banner::{BannerConfig, BannerPlugin};
use rspack_plugin_copy::CopyPlugin;
Expand Down Expand Up @@ -55,6 +55,13 @@ pub struct RawPresetEnv {
pub core_js: Option<String>,
}

#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
#[napi(object)]
pub struct RawCodeGeneration {
pub keep_comments: bool,
}

impl From<RawMinification> for Minification {
fn from(value: RawMinification) -> Self {
Self {
Expand All @@ -79,6 +86,13 @@ impl From<RawPresetEnv> for PresetEnv {
}
}

impl From<RawCodeGeneration> for CodeGeneration {
fn from(raw_code_generation: RawCodeGeneration) -> Self {
Self {
keep_comments: raw_code_generation.keep_comments,
}
}
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
#[napi(object)]
Expand All @@ -103,6 +117,7 @@ pub struct RawBuiltins {
pub banner: Option<Vec<RawBannerConfig>>,
pub plugin_import: Option<Vec<RawPluginImportConfig>>,
pub relay: Option<RawRelayConfig>,
pub code_generation: Option<RawCodeGeneration>,
}

impl RawOptionsApply for RawBuiltins {
Expand Down Expand Up @@ -170,6 +185,7 @@ impl RawOptionsApply for RawBuiltins {
.plugin_import
.map(|plugin_imports| plugin_imports.into_iter().map(Into::into).collect()),
relay: self.relay.map(Into::into),
code_generation: self.code_generation.map(Into::into),
})
}
}
6 changes: 6 additions & 0 deletions crates/rspack_core/src/options/builtins.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ pub struct Builtins {
pub dev_friendly_split_chunks: bool,
pub plugin_import: Option<Vec<PluginImportConfig>>,
pub relay: Option<RelayConfig>,
pub code_generation: Option<CodeGeneration>,
}

#[derive(Debug, Clone, Default, Hash)]
Expand All @@ -53,6 +54,11 @@ pub struct Minification {
pub pure_funcs: Vec<String>,
}

#[derive(Debug, Copy, Clone, Default)]
pub struct CodeGeneration {
pub keep_comments: bool,
}

#[derive(Debug, Clone)]
pub struct CopyPluginConfig {
pub patterns: Vec<Pattern>,
Expand Down
12 changes: 10 additions & 2 deletions crates/rspack_plugin_javascript/src/ast/stringify.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@ use swc_core::{
},
};

pub fn stringify(ast: &Ast, devtool: &Devtool) -> Result<TransformOutput> {
pub fn stringify(
ast: &Ast,
devtool: &Devtool,
keep_comments: Option<bool>,
) -> Result<TransformOutput> {
ast.visit(|program, context| {
print(
program.get_inner_program(),
Expand All @@ -32,7 +36,11 @@ pub fn stringify(ast: &Ast, devtool: &Devtool) -> Result<TransformOutput> {
names: Default::default(),
},
false,
None,
if let Some(true) = keep_comments {
program.comments.as_ref().map(|c| c as &dyn Comments)
} else {
None
},
false,
)
})
Expand Down
13 changes: 12 additions & 1 deletion crates/rspack_plugin_javascript/src/plugin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,18 @@ impl ParserAndGenerator for JavaScriptParserAndGenerator {
.try_into_ast()?
.try_into_javascript()?;
run_after_pass(&mut ast, module, generate_context)?;
let output = crate::ast::stringify(&ast, &generate_context.compilation.options.devtool)?;
let keep_comments = generate_context
.compilation
.options
.builtins
.code_generation
.as_ref()
.map(|cg| cg.keep_comments);
let output = crate::ast::stringify(
&ast,
&generate_context.compilation.options.devtool,
keep_comments,
)?;
if let Some(map) = output.map {
Ok(GenerationResult {
ast_or_source: SourceMapSource::new(SourceMapSourceOptions {
Expand Down
11 changes: 11 additions & 0 deletions crates/rspack_testing/src/test_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,12 @@ pub struct Minification {
pub pure_funcs: Vec<String>,
}

#[derive(Debug, Default, JsonSchema, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct CodeGeneration {
pub keep_comments: bool,
}

#[derive(Debug, JsonSchema, Deserialize, Default, Clone)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct PresetEnv {
Expand Down Expand Up @@ -155,6 +161,8 @@ pub struct Builtins {
pub css: Css,
#[serde(default)]
pub dev_friendly_split_chunks: bool,
#[serde(default)]
pub code_generation: Option<CodeGeneration>,
}

#[derive(Debug, JsonSchema, Deserialize, Default)]
Expand Down Expand Up @@ -416,6 +424,9 @@ impl TestConfig {
pure_funcs: op.pure_funcs,
}),
preset_env: self.builtins.preset_env.map(Into::into),
code_generation: self.builtins.code_generation.map(|op| c::CodeGeneration {
keep_comments: op.keep_comments,
}),
..Default::default()
},
module: c::ModuleOptions {
Expand Down
19 changes: 17 additions & 2 deletions packages/rspack/src/config/builtins.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ import type {
RawPresetEnv,
RawPluginImportConfig,
RawCssModulesConfig,
RawRelayConfig
RawRelayConfig,
RawCodeGeneration
} from "@rspack/binding";
import { loadConfig } from "browserslist";
import { getBannerConditions } from "./adapter";
Expand Down Expand Up @@ -65,6 +66,7 @@ export interface Builtins {
banner?: BannerConfigs;
pluginImport?: PluginImportConfig[];
relay?: RelayConfig;
codeGeneration?: Partial<RawCodeGeneration>;
}

export type PluginImportConfig = {
Expand Down Expand Up @@ -373,7 +375,8 @@ export function resolveBuiltinsOptions(
pluginImport: resolvePluginImport(builtins.pluginImport),
relay: builtins.relay
? resolveRelay(builtins.relay, contextPath)
: undefined
: undefined,
codeGeneration: resolveCodeGeneration(builtins.codeGeneration)
};
}

Expand Down Expand Up @@ -425,3 +428,15 @@ export function resolveMinifyOptions(
...builtins.minifyOptions
};
}

export function resolveCodeGeneration(
codeGeneration: Builtins["codeGeneration"]
): RawCodeGeneration {
if (!codeGeneration) {
return { keepComments: false };
}
return {
keepComments: false,
...codeGeneration
};
}
Loading

0 comments on commit e764de6

Please sign in to comment.