@@ -219,6 +219,9 @@ pub struct ParseOptions<'a> {
219219
220220impl < ' a > ParseOptions < ' a > {
221221 /// Change the base URL
222+ ///
223+ /// See the notes of [`Url::join`] for more details about how this base is considered
224+ /// when parsing.
222225 pub fn base_url ( mut self , new : Option < & ' a Url > ) -> Self {
223226 self . base_url = new;
224227 self
@@ -370,24 +373,42 @@ impl Url {
370373 ///
371374 /// The inverse of this is [`make_relative`].
372375 ///
373- /// Note: a trailing slash is significant.
376+ /// # Notes
377+ ///
378+ /// - A trailing slash is significant.
374379 /// Without it, the last path component is considered to be a “file” name
375- /// to be removed to get at the “directory” that is used as the base:
380+ /// to be removed to get at the “directory” that is used as the base.
381+ /// - A [scheme relative special URL](https://url.spec.whatwg.org/#scheme-relative-special-url-string)
382+ /// as input replaces everything in the base URL after the scheme.
383+ /// - An absolute URL (with a scheme) as input replaces the whole base URL (even the scheme).
376384 ///
377385 /// # Examples
378386 ///
379387 /// ```rust
380388 /// use url::Url;
381389 /// # use url::ParseError;
382390 ///
391+ /// // Base without a trailing slash
383392 /// # fn run() -> Result<(), ParseError> {
384393 /// let base = Url::parse("https://example.net/a/b.html")?;
385394 /// let url = base.join("c.png")?;
386395 /// assert_eq!(url.as_str(), "https://example.net/a/c.png"); // Not /a/b.html/c.png
387396 ///
397+ /// // Base with a trailing slash
388398 /// let base = Url::parse("https://example.net/a/b/")?;
389399 /// let url = base.join("c.png")?;
390400 /// assert_eq!(url.as_str(), "https://example.net/a/b/c.png");
401+ ///
402+ /// // Input as scheme relative special URL
403+ /// let base = Url::parse("https://alice.com/a")?;
404+ /// let url = base.join("//eve.com/b")?;
405+ /// assert_eq!(url.as_str(), "https://eve.com/b");
406+ ///
407+ /// // Input as absolute URL
408+ /// let base = Url::parse("https://alice.com/a")?;
409+ /// let url = base.join("http://eve.com/b")?;
410+ /// assert_eq!(url.as_str(), "http://eve.com/b"); // http instead of https
411+
391412 /// # Ok(())
392413 /// # }
393414 /// # run().unwrap();
0 commit comments