errors: support fluent + parallel compiler
Conditional on the parallel compiler being enabled, use a different `IntlLangMemoizer` which supports being sent between threads in `FluentBundle`. Signed-off-by: David Wood <david.wood@huawei.com>
This commit is contained in:
parent
da56d92037
commit
ccd4820326
@ -3711,6 +3711,7 @@ version = "0.0.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"fluent-bundle",
|
"fluent-bundle",
|
||||||
"fluent-syntax",
|
"fluent-syntax",
|
||||||
|
"intl-memoizer",
|
||||||
"rustc_data_structures",
|
"rustc_data_structures",
|
||||||
"rustc_macros",
|
"rustc_macros",
|
||||||
"rustc_serialize",
|
"rustc_serialize",
|
||||||
|
@ -9,6 +9,7 @@ doctest = false
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
fluent-bundle = "0.15.2"
|
fluent-bundle = "0.15.2"
|
||||||
fluent-syntax = "0.11"
|
fluent-syntax = "0.11"
|
||||||
|
intl-memoizer = "0.5.1"
|
||||||
rustc_data_structures = { path = "../rustc_data_structures" }
|
rustc_data_structures = { path = "../rustc_data_structures" }
|
||||||
rustc_serialize = { path = "../rustc_serialize" }
|
rustc_serialize = { path = "../rustc_serialize" }
|
||||||
rustc_span = { path = "../rustc_span" }
|
rustc_span = { path = "../rustc_span" }
|
||||||
|
@ -14,12 +14,27 @@
|
|||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use tracing::{instrument, trace};
|
use tracing::{instrument, trace};
|
||||||
|
|
||||||
|
#[cfg(parallel_compiler)]
|
||||||
|
use intl_memoizer::concurrent::IntlLangMemoizer;
|
||||||
|
#[cfg(not(parallel_compiler))]
|
||||||
|
use intl_memoizer::IntlLangMemoizer;
|
||||||
|
|
||||||
pub use fluent_bundle::{FluentArgs, FluentError, FluentValue};
|
pub use fluent_bundle::{FluentArgs, FluentError, FluentValue};
|
||||||
pub use unic_langid::{langid, LanguageIdentifier};
|
pub use unic_langid::{langid, LanguageIdentifier};
|
||||||
|
|
||||||
static FALLBACK_FLUENT_RESOURCE: &'static str = include_str!("../locales/en-US/diagnostics.ftl");
|
static FALLBACK_FLUENT_RESOURCE: &'static str = include_str!("../locales/en-US/diagnostics.ftl");
|
||||||
|
|
||||||
pub type FluentBundle = fluent_bundle::FluentBundle<FluentResource>;
|
pub type FluentBundle = fluent_bundle::bundle::FluentBundle<FluentResource, IntlLangMemoizer>;
|
||||||
|
|
||||||
|
#[cfg(parallel_compiler)]
|
||||||
|
fn new_bundle(locales: Vec<LanguageIdentifier>) -> FluentBundle {
|
||||||
|
FluentBundle::new_concurrent(locales)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(parallel_compiler))]
|
||||||
|
fn new_bundle(locales: Vec<LanguageIdentifier>) -> FluentBundle {
|
||||||
|
FluentBundle::new(locales)
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum TranslationBundleError {
|
pub enum TranslationBundleError {
|
||||||
@ -114,7 +129,7 @@ pub fn fluent_bundle(
|
|||||||
// provided locale.
|
// provided locale.
|
||||||
let locale = requested_locale.clone().unwrap_or(fallback_locale);
|
let locale = requested_locale.clone().unwrap_or(fallback_locale);
|
||||||
trace!(?locale);
|
trace!(?locale);
|
||||||
let mut bundle = FluentBundle::new(vec![locale]);
|
let mut bundle = new_bundle(vec![locale]);
|
||||||
|
|
||||||
// Fluent diagnostics can insert directionality isolation markers around interpolated variables
|
// Fluent diagnostics can insert directionality isolation markers around interpolated variables
|
||||||
// indicating that there may be a shift from right-to-left to left-to-right text (or
|
// indicating that there may be a shift from right-to-left to left-to-right text (or
|
||||||
@ -176,7 +191,7 @@ pub fn fallback_fluent_bundle(
|
|||||||
let fallback_resource = FluentResource::try_new(FALLBACK_FLUENT_RESOURCE.to_string())
|
let fallback_resource = FluentResource::try_new(FALLBACK_FLUENT_RESOURCE.to_string())
|
||||||
.map_err(TranslationBundleError::from)?;
|
.map_err(TranslationBundleError::from)?;
|
||||||
trace!(?fallback_resource);
|
trace!(?fallback_resource);
|
||||||
let mut fallback_bundle = FluentBundle::new(vec![langid!("en-US")]);
|
let mut fallback_bundle = new_bundle(vec![langid!("en-US")]);
|
||||||
// See comment in `fluent_bundle`.
|
// See comment in `fluent_bundle`.
|
||||||
fallback_bundle.set_use_isolating(with_directionality_markers);
|
fallback_bundle.set_use_isolating(with_directionality_markers);
|
||||||
fallback_bundle.add_resource(fallback_resource).map_err(TranslationBundleError::from)?;
|
fallback_bundle.add_resource(fallback_resource).map_err(TranslationBundleError::from)?;
|
||||||
|
Loading…
Reference in New Issue
Block a user