<!DOCTYPE html><htmllang="en"><head><metacharset="utf-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><metaname="generator"content="rustdoc"><metaname="description"content="Extensions to the parsing API with niche applicability."><metaname="keywords"content="rust, rustlang, rust-lang, discouraged"><title>syn::parse::discouraged - Rust</title><linkrel="stylesheet"type="text/css"href="../../../normalize.css"><linkrel="stylesheet"type="text/css"href="../../../rustdoc.css"id="mainThemeStyle"><linkrel="stylesheet"type="text/css"href="../../../light.css"id="themeStyle"><linkrel="stylesheet"type="text/css"href="../../../dark.css"disabled><linkrel="stylesheet"type="text/css"href="../../../ayu.css"disabled><scriptid="default-settings"></script><scriptsrc="../../../storage.js"></script><scriptsrc="../../../crates.js"></script><noscript><linkrel="stylesheet"href="../../../noscript.css"></noscript><linkrel="icon"type="image/svg+xml"href="../../../favicon.svg">
<linkrel="alternate icon"type="image/png"href="../../../favicon-32x32.png"><styletype="text/css">#crate-search{background-image:url("../../../down-arrow.svg");}</style></head><bodyclass="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><navclass="sidebar"><divclass="sidebar-menu"role="button">☰</div><ahref='../../../syn/index.html'><divclass='logo-container rust-logo'><imgsrc='../../../rust-logo.png'alt='logo'></div></a><pclass="location">Module discouraged</p><divclass="sidebar-elems"><divclass="block items"><ul><li><ahref="#traits">Traits</a></li></ul></div><pclass="location"><ahref="../../index.html">syn</a>::<wbr><ahref="../index.html">parse</a></p><divid="sidebar-vars"data-name="discouraged"data-ty="mod"data-relpath="../"></div><scriptdefersrc="../sidebar-items.js"></script></div></nav><divclass="theme-picker"><buttonid="theme-picker"aria-label="Pick another theme!"aria-haspopup="menu"><imgsrc="../../../brush.svg"width="18"height="18"alt="Pick another theme!"></button><divid="theme-choices"role="menu"></div></div><navclass="sub"><formclass="search-form"><divclass="search-container"><div><selectid="crate-search"><optionvalue="All crates">All crates</option></select><inputclass="search-input"name="search"disabledautocomplete="off"spellcheck="false"placeholder="Click or press ‘S’ to search, ‘?’ for more options…"type="search"></div><buttontype="button"class="help-button">?</button>
<aid="settings-menu"href="../../../settings.html"><imgsrc="../../../wheel.svg"width="18"height="18"alt="Change settings"></a></div></form></nav><sectionid="main"class="content"><h1class="fqn"><spanclass="in-band">Module <ahref="../../index.html">syn</a>::<wbr><ahref="../index.html">parse</a>::<wbr><aclass="mod"href="">discouraged</a><buttonid="copy-path"onclick="copy_path(this)">⎘</button></span><spanclass="out-of-band"><spanid="render-detail"><aid="toggle-all-docs"href="javascript:void(0)"title="collapse all docs">[<spanclass="inner">−</span>]</a></span><aclass="srclink"href="../../../src/syn/discouraged.rs.html#1-194"title="goto source code">[src]</a></span></h1><divclass="docblock"><p>Extensions to the parsing API with niche applicability.</p>
<table><trclass="module-item"><td><aclass="trait"href="trait.Speculative.html"title="syn::parse::discouraged::Speculative trait">Speculative</a></td><tdclass="docblock-short"><p>Extensions to the <code>ParseStream</code> API to support speculative parsing.</p>
<!DOCTYPE html><htmllang="en"><head><metacharset="utf-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><metaname="generator"content="rustdoc"><metaname="description"content="Extensions to the parsing API with niche applicability."><title>syn::parse::discouraged - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/${f}">`).join(""))</script><linkrel="stylesheet"href="../../../static.files/normalize-9960930a.css"><linkrel="stylesheet"href="../../../static.files/rustdoc-46132b98.css"><metaname="rustdoc-vars"data-root-path="../../../"data-static-root-path="../../../static.files/"data-current-crate="syn"data-themes=""data-resource-suffix=""data-rustdoc-version="1.85.1 (4eb161250 2025-03-15)"data-channel="1.85.1"data-search-js="search-75f5ac3e.js"data-settings-js="settings-0f613d39.js"><scriptsrc="../../../static.files/storage-59e33391.js"></script><scriptdefersrc="../sidebar-items.js"></script><scriptdefersrc="../../../static.files/main-5f194d8c.js"></script><noscript><linkrel="stylesheet"href="../../../static.files/noscript-893ab5e7.css"></noscript><linkrel="alternate icon"type="image/png"href="../../../static.files/favicon-32x32-6580c154.png"><linkrel="icon"type="image/svg+xml"href="../../../static.files/favicon-044be391.svg"></head><bodyclass="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><navclass="mobile-topbar"><buttonclass="sidebar-menu-toggle"title="show sidebar"></button></nav><navclass="sidebar"><divclass="sidebar-crate"><h2><ahref="../../../syn/index.html">syn</a><spanclass="version">2.0.100</span></h2></div><divclass="sidebar-elems"><sectionid="rustdoc-toc"><h2class="location"><ahref="#">Module discouraged</a></h2><h3><ahref="#traits">Module Items</a></h3><ulclass="block"><li><ahref="#traits"title="Traits">Traits</a></li></ul></section><divid="rustdoc-modnav"><h2><ahref="../index.html">In syn::<wbr>parse</a></h2></div></div></nav><divclass="sidebar-resizer"></div><main><divclass="width-limiter"><rustdoc-search></rustdoc-search><sectionid="main-content"class="content"><divclass="main-heading"><spanclass="rustdoc-breadcrumbs"><ahref="../../index.html">syn</a>::<wbr><ahref="../index.html">parse</a></span><h1>Module <span>discouraged</span><buttonid="copy-path"title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><spanclass="sub-heading"><aclass="src"href="../../../src/syn/discouraged.rs.html#1-225">Source</a></span></div><detailsclass="toggle top-doc"open><summaryclass="hideme"><span>Expand description</span></summary><divclass="docblock"><p>Extensions to the parsing API with niche applicability.</p>
</div></details><h2id="traits"class="section-header">Traits<ahref="#traits"class="anchor">§</a></h2><ulclass="item-table"><li><divclass="item-name"><aclass="trait"href="trait.AnyDelimiter.html"title="trait syn::parse::discouraged::AnyDelimiter">AnyDelimiter</a></div><divclass="desc docblock-short">Extensions to the <code>ParseStream</code> API to support manipulating invisible
delimiters the same as if they were visible.</div></li><li><divclass="item-name"><aclass="trait"href="trait.Speculative.html"title="trait syn::parse::discouraged::Speculative">Speculative</a></div><divclass="desc docblock-short">Extensions to the <code>ParseStream</code> API to support speculative parsing.</div></li></ul></section></div></main></body></html>
<!DOCTYPE html><htmllang="en"><head><metacharset="utf-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><metaname="generator"content="rustdoc"><metaname="description"content="Extensions to the `ParseStream` API to support manipulating invisible delimiters the same as if they were visible."><title>AnyDelimiter in syn::parse::discouraged - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/${f}">`).join(""))</script><linkrel="stylesheet"href="../../../static.files/normalize-9960930a.css"><linkrel="stylesheet"href="../../../static.files/rustdoc-46132b98.css"><metaname="rustdoc-vars"data-root-path="../../../"data-static-root-path="../../../static.files/"data-current-crate="syn"data-themes=""data-resource-suffix=""data-rustdoc-version="1.85.1 (4eb161250 2025-03-15)"data-channel="1.85.1"data-search-js="search-75f5ac3e.js"data-settings-js="settings-0f613d39.js"><scriptsrc="../../../static.files/storage-59e33391.js"></script><scriptdefersrc="sidebar-items.js"></script><scriptdefersrc="../../../static.files/main-5f194d8c.js"></script><noscript><linkrel="stylesheet"href="../../../static.files/noscript-893ab5e7.css"></noscript><linkrel="alternate icon"type="image/png"href="../../../static.files/favicon-32x32-6580c154.png"><linkrel="icon"type="image/svg+xml"href="../../../static.files/favicon-044be391.svg"></head><bodyclass="rustdoc trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><navclass="mobile-topbar"><buttonclass="sidebar-menu-toggle"title="show sidebar"></button></nav><navclass="sidebar"><divclass="sidebar-crate"><h2><ahref="../../../syn/index.html">syn</a><spanclass="version">2.0.100</span></h2></div><divclass="sidebar-elems"><sectionid="rustdoc-toc"><h2class="location"><ahref="#">AnyDelimiter</a></h2><h3><ahref="#required-methods">Required Methods</a></h3><ulclass="block"><li><ahref="#tymethod.parse_any_delimiter"title="parse_any_delimiter">parse_any_delimiter</a></li></ul><h3><ahref="#implementors">Implementors</a></h3></section><divid="rustdoc-modnav"><h2><ahref="index.html">In syn::<wbr>parse::<wbr>discouraged</a></h2></div></div></nav><divclass="sidebar-resizer"></div><main><divclass="width-limiter"><rustdoc-search></rustdoc-search><sectionid="main-content"class="content"><divclass="main-heading"><spanclass="rustdoc-breadcrumbs"><ahref="../../index.html">syn</a>::<wbr><ahref="../index.html">parse</a>::<wbr><ahref="index.html">discouraged</a></span><h1>Trait <spanclass="trait">AnyDelimiter</span><buttonid="copy-path"title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><spanclass="sub-heading"><aclass="src"href="../../../src/syn/discouraged.rs.html#205-209">Source</a></span></div><preclass="rust item-decl"><code>pub trait AnyDelimiter {
}</code></pre><detailsclass="toggle top-doc"open><summaryclass="hideme"><span>Expand description</span></summary><divclass="docblock"><p>Extensions to the <code>ParseStream</code> API to support manipulating invisible
delimiters the same as if they were visible.</p>
</div></details><h2id="required-methods"class="section-header">Required Methods<ahref="#required-methods"class="anchor">§</a></h2><divclass="methods"><detailsclass="toggle method-toggle"open><summary><sectionid="tymethod.parse_any_delimiter"class="method"><aclass="src rightside"href="../../../src/syn/discouraged.rs.html#208">Source</a><h4class="code-header">fn <ahref="#tymethod.parse_any_delimiter"class="fn">parse_any_delimiter</a>(&self) -><aclass="type"href="../../type.Result.html"title="type syn::Result">Result</a><(<aclass="enum"href="../../../proc_macro2/enum.Delimiter.html"title="enum proc_macro2::Delimiter">Delimiter</a>, <aclass="struct"href="../../../proc_macro2/extra/struct.DelimSpan.html"title="struct proc_macro2::extra::DelimSpan">DelimSpan</a>, <aclass="struct"href="../struct.ParseBuffer.html"title="struct syn::parse::ParseBuffer">ParseBuffer</a><'_>)></h4></section></summary><divclass="docblock"><p>Returns the delimiter, the span of the delimiter token, and the nested
contents for further parsing.</p>
</div></details></div><h2id="implementors"class="section-header">Implementors<ahref="#implementors"class="anchor">§</a></h2><divid="implementors-list"><sectionid="impl-AnyDelimiter-for-ParseBuffer%3C'a%3E"class="impl"><aclass="src rightside"href="../../../src/syn/discouraged.rs.html#211-225">Source</a><ahref="#impl-AnyDelimiter-for-ParseBuffer%3C'a%3E"class="anchor">§</a><h3class="code-header">impl<'a><aclass="trait"href="trait.AnyDelimiter.html"title="trait syn::parse::discouraged::AnyDelimiter">AnyDelimiter</a> for <aclass="struct"href="../struct.ParseBuffer.html"title="struct syn::parse::ParseBuffer">ParseBuffer</a><'a></h3></section></div><scriptsrc="../../../trait.impl/syn/parse/discouraged/trait.AnyDelimiter.js"async></script></section></div></main></body></html>
<!DOCTYPE html><htmllang="en"><head><metacharset="utf-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><metaname="generator"content="rustdoc"><metaname="description"content="Extensions to the `ParseStream` API to support speculative parsing."><metaname="keywords"content="rust, rustlang, rust-lang, Speculative"><title>Speculative in syn::parse::discouraged - Rust</title><linkrel="stylesheet"type="text/css"href="../../../normalize.css"><linkrel="stylesheet"type="text/css"href="../../../rustdoc.css"id="mainThemeStyle"><linkrel="stylesheet"type="text/css"href="../../../light.css"id="themeStyle"><linkrel="stylesheet"type="text/css"href="../../../dark.css"disabled><linkrel="stylesheet"type="text/css"href="../../../ayu.css"disabled><scriptid="default-settings"></script><scriptsrc="../../../storage.js"></script><scriptsrc="../../../crates.js"></script><noscript><linkrel="stylesheet"href="../../../noscript.css"></noscript><linkrel="icon"type="image/svg+xml"href="../../../favicon.svg">
<linkrel="alternate icon"type="image/png"href="../../../favicon-32x32.png"><styletype="text/css">#crate-search{background-image:url("../../../down-arrow.svg");}</style></head><bodyclass="rustdoc trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><navclass="sidebar"><divclass="sidebar-menu"role="button">☰</div><ahref='../../../syn/index.html'><divclass='logo-container rust-logo'><imgsrc='../../../rust-logo.png'alt='logo'></div></a><pclass="location">Trait Speculative</p><divclass="sidebar-elems"><divclass="block items"><aclass="sidebar-title"href="#required-methods">Required Methods</a><divclass="sidebar-links"><ahref="#tymethod.advance_to">advance_to</a></div><aclass="sidebar-title"href="#implementors">Implementors</a></div><pclass="location"><ahref="../../index.html">syn</a>::<wbr><ahref="../index.html">parse</a>::<wbr><ahref="index.html">discouraged</a></p><divid="sidebar-vars"data-name="Speculative"data-ty="trait"data-relpath=""></div><scriptdefersrc="sidebar-items.js"></script></div></nav><divclass="theme-picker"><buttonid="theme-picker"aria-label="Pick another theme!"aria-haspopup="menu"><imgsrc="../../../brush.svg"width="18"height="18"alt="Pick another theme!"></button><divid="theme-choices"role="menu"></div></div><navclass="sub"><formclass="search-form"><divclass="search-container"><div><selectid="crate-search"><optionvalue="All crates">All crates</option></select><inputclass="search-input"name="search"disabledautocomplete="off"spellcheck="false"placeholder="Click or press ‘S’ to search, ‘?’ for more options…"type="search"></div><buttontype="button"class="help-button">?</button>
}</pre></div><divclass="docblock"><p>Extensions to the <code>ParseStream</code> API to support speculative parsing.</p>
</div><h2id="required-methods"class="small-section-header">Required methods<ahref="#required-methods"class="anchor"></a></h2><divclass="methods"><h3id="tymethod.advance_to"class="method"><code>fn <ahref="#tymethod.advance_to"class="fnname">advance_to</a>(&self, fork: <aclass="primitive"href="https://doc.rust-lang.org/nightly/std/primitive.reference.html">&</a>Self)</code><aclass="srclink"href="../../../src/syn/discouraged.rs.html#157"title="goto source code">[src]</a></h3><divclass="docblock"><p>Advance this parse stream to the position of a forked parse stream.</p>
<p>This is the opposite operation to <ahref="../struct.ParseBuffer.html#method.fork"><code>ParseStream::fork</code></a>. You can fork a
<!DOCTYPE html><htmllang="en"><head><metacharset="utf-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><metaname="generator"content="rustdoc"><metaname="description"content="Extensions to the `ParseStream` API to support speculative parsing."><title>Speculative in syn::parse::discouraged - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/${f}">`).join(""))</script><linkrel="stylesheet"href="../../../static.files/normalize-9960930a.css"><linkrel="stylesheet"href="../../../static.files/rustdoc-46132b98.css"><metaname="rustdoc-vars"data-root-path="../../../"data-static-root-path="../../../static.files/"data-current-crate="syn"data-themes=""data-resource-suffix=""data-rustdoc-version="1.85.1 (4eb161250 2025-03-15)"data-channel="1.85.1"data-search-js="search-75f5ac3e.js"data-settings-js="settings-0f613d39.js"><scriptsrc="../../../static.files/storage-59e33391.js"></script><scriptdefersrc="sidebar-items.js"></script><scriptdefersrc="../../../static.files/main-5f194d8c.js"></script><noscript><linkrel="stylesheet"href="../../../static.files/noscript-893ab5e7.css"></noscript><linkrel="alternate icon"type="image/png"href="../../../static.files/favicon-32x32-6580c154.png"><linkrel="icon"type="image/svg+xml"href="../../../static.files/favicon-044be391.svg"></head><bodyclass="rustdoc trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><navclass="mobile-topbar"><buttonclass="sidebar-menu-toggle"title="show sidebar"></button></nav><navclass="sidebar"><divclass="sidebar-crate"><h2><ahref="../../../syn/index.html">syn</a><spanclass="version">2.0.100</span></h2></div><divclass="sidebar-elems"><sectionid="rustdoc-toc"><h2class="location"><ahref="#">Speculative</a></h2><h3><ahref="#required-methods">Required Methods</a></h3><ulclass="block"><li><ahref="#tymethod.advance_to"title="advance_to">advance_to</a></li></ul><h3><ahref="#dyn-compatibility">Dyn Compatibility</a></h3><h3><ahref="#implementors">Implementors</a></h3></section><divid="rustdoc-modnav"><h2><ahref="index.html">In syn::<wbr>parse::<wbr>discouraged</a></h2></div></div></nav><divclass="sidebar-resizer"></div><main><divclass="width-limiter"><rustdoc-search></rustdoc-search><sectionid="main-content"class="content"><divclass="main-heading"><spanclass="rustdoc-breadcrumbs"><ahref="../../index.html">syn</a>::<wbr><ahref="../index.html">parse</a>::<wbr><ahref="index.html">discouraged</a></span><h1>Trait <spanclass="trait">Speculative</span><buttonid="copy-path"title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><spanclass="sub-heading"><aclass="src"href="../../../src/syn/discouraged.rs.html#13-165">Source</a></span></div><preclass="rust item-decl"><code>pub trait Speculative {
}</code></pre><detailsclass="toggle top-doc"open><summaryclass="hideme"><span>Expand description</span></summary><divclass="docblock"><p>Extensions to the <code>ParseStream</code> API to support speculative parsing.</p>
</div></details><h2id="required-methods"class="section-header">Required Methods<ahref="#required-methods"class="anchor">§</a></h2><divclass="methods"><detailsclass="toggle method-toggle"open><summary><sectionid="tymethod.advance_to"class="method"><aclass="src rightside"href="../../../src/syn/discouraged.rs.html#164">Source</a><h4class="code-header">fn <ahref="#tymethod.advance_to"class="fn">advance_to</a>(&self, fork: &Self)</h4></section></summary><divclass="docblock"><p>Advance this parse stream to the position of a forked parse stream.</p>
<p>This is the opposite operation to <ahref="../struct.ParseBuffer.html#method.fork"title="method syn::parse::ParseBuffer::fork"><code>ParseStream::fork</code></a>. You can fork a
parse stream, perform some speculative parsing, then join the original
stream to the fork to “commit” the parsing from the fork to the main
stream.</p>
@@ -20,95 +18,90 @@ an <code>A</code>, or that the <code>A</code>s are finished and it’s time to s
parsing <code>B*</code> and removing the leading members of <code>A</code> from the
repetition, bypassing the need to involve the downsides associated with
<p>There has been chatter about the possibility of making the colons in the
turbofish syntax like <code>path::to::<T></code> no longer required by accepting
<code>path::to<T></code> in expression position. Specifically, according to <ahref="https://github.com/rust-lang/rfcs/pull/2544">RFC
2544</a>, <ahref="../../struct.PathSegment.html"><code>PathSegment</code></a> parsing should always try to consume a following
2544</a>, <ahref="../../struct.PathSegment.html"title="struct syn::PathSegment"><code>PathSegment</code></a> parsing should always try to consume a following
<code><</code> token as the start of generic arguments, and reset to the <code><</code> if
that fails (e.g. the token is acting as a less-than operator).</p>
<p>This is the exact kind of parsing behavior which requires the “fork,
try, commit” behavior that <ahref="../struct.ParseBuffer.html#method.fork"><code>ParseStream::fork</code></a> discourages. With
try, commit” behavior that <ahref="../struct.ParseBuffer.html#method.fork"title="method syn::parse::ParseBuffer::fork"><code>ParseStream::fork</code></a> discourages. With
<code>advance_to</code>, we can avoid having to parse the speculatively parsed
content a second time.</p>
<p>This change in behavior can be implemented in syn by replacing just the
<code>Parse</code> implementation for <code>PathSegment</code>:</p>
</div></details></div><h2id="dyn-compatibility"class="section-header">Dyn Compatibility<ahref="#dyn-compatibility"class="anchor">§</a></h2><divclass="dyn-compatibility-info"><p>This trait is <b>not</b><ahref="https://doc.rust-lang.org/1.85.1/reference/items/traits.html#object-safety">dyn compatible</a>.</p><p><i>In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.</i></p></div><h2id="implementors"class="section-header">Implementors<ahref="#implementors"class="anchor">§</a></h2><divid="implementors-list"><sectionid="impl-Speculative-for-ParseBuffer%3C'a%3E"class="impl"><aclass="src rightside"href="../../../src/syn/discouraged.rs.html#167-201">Source</a><ahref="#impl-Speculative-for-ParseBuffer%3C'a%3E"class="anchor">§</a><h3class="code-header">impl<'a><aclass="trait"href="trait.Speculative.html"title="trait syn::parse::discouraged::Speculative">Speculative</a> for <aclass="struct"href="../struct.ParseBuffer.html"title="struct syn::parse::ParseBuffer">ParseBuffer</a><'a></h3></section></div><scriptsrc="../../../trait.impl/syn/parse/discouraged/trait.Speculative.js"async></script></section></div></main></body></html>
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.