Skip to content

Commit

Permalink
Deploying to gh-pages from @ 33b90bc 🚀
Browse files Browse the repository at this point in the history
  • Loading branch information
facebook-github-bot committed Oct 16, 2024
1 parent 47f0889 commit fb2beec
Show file tree
Hide file tree
Showing 60 changed files with 202 additions and 146 deletions.
4 changes: 2 additions & 2 deletions 404.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
<meta name="generator" content="Docusaurus v2.1.0">
<title data-rh="true">Page Not Found | Glean</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://glean.software/404.html"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Page Not Found | Glean"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://glean.software/404.html"><link data-rh="true" rel="alternate" href="https://glean.software/404.html" hreflang="en"><link data-rh="true" rel="alternate" href="https://glean.software/404.html" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Glean RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Glean Atom Feed"><link rel="stylesheet" href="/assets/css/styles.34be974f.css">
<link rel="preload" href="/assets/js/runtime~main.f2a12ae4.js" as="script">
<link rel="preload" href="/assets/js/runtime~main.eac7e610.js" as="script">
<link rel="preload" href="/assets/js/main.a772105e.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())</script>
<div style="display: none; text-align: center; background-color: white; color: black;" id="internaldocs-banner"></div><div id="__docusaurus">
<div role="region" aria-label="theme.common.skipToMainContent"><a href="#" class="skipToContent_fXgn">Skip to main content</a></div><div class="announcementBar_mb4j" style="background-color:#20232a;color:#fff" role="banner"><div class="content_knG7 announcementBarContent_xLdY">Support Ukraine 🇺🇦 <a target="_blank" rel="noopener noreferrer" href="https://opensource.fb.com/support-ukraine"> Help Provide Humanitarian Aid to Ukraine</a>.</div></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><b class="navbar__title text--truncate">Glean</b></a><a class="navbar__item navbar__link" href="/docs/introduction/">Documentation</a><a class="navbar__item navbar__link" href="/blog/">Blog</a></div><div class="navbar__items navbar__items--right"><a href="https://github.com/facebookincubator/glean" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div class="main-wrapper mainWrapper_z2l0"><main class="container margin-vert--xl"><div class="row"><div class="col col--6 col--offset-3"><h1 class="hero__title">Page Not Found</h1><p>We could not find what you were looking for.</p><p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</p></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Learn</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/introduction/">Getting Started</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://twitter.com/MetaOpenSource" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://discord.gg/w3s6X6QAHZ" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/blog/">Blog</a></li><li class="footer__item"><a href="https://github.com/facebookincubator/glean" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Legal</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://opensource.fb.com/legal/privacy" target="_blank" rel="noopener noreferrer" class="footer__link-item">Privacy<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://opensource.fb.com/legal/terms" target="_blank" rel="noopener noreferrer" class="footer__link-item">Terms<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="margin-bottom--sm"><a href="https://opensource.facebook.com" rel="noopener noreferrer" class="footerLogoLink_BH7S"><img src="/img/oss_logo.png" alt="Facebook Open Source Logo" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/oss_logo.png" alt="Facebook Open Source Logo" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></a></div><div class="footer__copyright">Copyright © Meta Platforms, Inc. Built with Docusaurus.</div></div></div></footer></div>
<script src="/assets/js/runtime~main.f2a12ae4.js"></script>
<script src="/assets/js/runtime~main.eac7e610.js"></script>
<script src="/assets/js/main.a772105e.js"></script>
</body>
</html>
2 changes: 1 addition & 1 deletion _src/angle/advanced.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ facts> example.Parent { child = $1026 }
{ "id": 1029, "key": { "child": { "id": 1026 }, "parent": { "id": 1024 } } }
```

Sometimes you might want to use multiple fact IDs in a query. Or-patterns come in handy here:
Sometimes you might want to use multiple fact IDs in a query. Choice (`|`) comes in handy here:

```lang=angle
facts> example.Parent { child = $1026 | $1027 }
Expand Down
102 changes: 78 additions & 24 deletions _src/angle/guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ Methods with documentation:
facts> example.Member { method = { doc = { just = _ }}}
```

## Or-patterns
## Choice

In a pattern we can express multiple alternatives by separating patterns with a vertical bar `|`.

Expand All @@ -256,29 +256,7 @@ facts> example.Has { has = { method = { name = "feed" }} | { variable = _ }}
(results omitted)
```

## If-patterns

We can conditionally match patterns using `if then else`.

Variables matched in the condition will be available in the `then` branch.

Whilst an or-pattern will always evaluate both of its branches, the `else` branch of an if-pattern will
never be evaluated if the condition succeeds at least once.

For example, we could get all child classes if inheritance is being used in the codebase, or
retrieve all classes if it isn't.
```
facts > if (example.Parent { child = X }) then X else example.Class _
{ "id": 1025, "key": { "name": "Lizard", "line": 20 } }
{ "id": 1026, "key": { "name": "Fish", "line": 30 } }
{ "id": 1027, "key": { "name": "Goldfish", "line": 40 } }
```

Please note that if-patterns cannot be used in stored derived predicates. This
is the case because they require the use of negation, which is disallowed in
stored predicates.

## More complex queries
## Variables and more complex queries

So far we’ve seen how to query for facts by matching patterns, including matching nested facts. In this section we’ll see how to construct more complex queries that combine matching facts from multiple predicates.

Expand Down Expand Up @@ -373,6 +351,82 @@ C where
example.Has { class_ = C, has = { method = { name = "feed" }}}
```

## Dot syntax

So far we've been extracting fields from records by writing patterns,
but we can also extract fields from records using the traditional "dot
syntax". For example, instead of

```
example.Parent { child = { name = "Fish" }}
```

we could write

```
example.Parent P where P.child.name = "Fish"
```

Here
* `example.Parent P` selects facts of `example.Parent` and binds the key to the variable `P`
* `P.child.name = "Fish"` is a constraint on the `name` field of the `child` field of `P`
* the query returns all facts of `example.Parent` that satisfy the constraint

Dot syntax tends to be more concise than patterns when there are
deeply-nested records, because it avoids all the nested braces.

### Dot syntax for union types

Matching union types can also be achieved using dot syntax. For
example, earlier we had

```
example.Has { has = { variable = { name = "fins" }}}
```

using dot syntax this would be

```
example.Has H where H.has.variable?.name = "fins"
```

Note that when selecting a union type we add a '?' suffix,
as with `.variable?` in the example above. This makes it more obvious
that we're doing something conditional: if `X.has` is not a
`variable`, then `X.has.variable?` has no values.

Selecting from union types works nicely with choice (`|`):

```
Name where
example.Has H;
Name = (H.has.variable?.name | H.has.method?.name)
```

returns all the names of variables and methods.

## If-then-else

We can conditionally match patterns using `if then else`.

Variables matched in the condition will be available in the `then` branch.

Whilst a choice will always evaluate both of its branches, the `else` branch of an if will
never be evaluated if the condition succeeds at least once.

For example, we could get all child classes if inheritance is being used in the codebase, or
retrieve all classes if it isn't.
```
facts > if (example.Parent { child = X }) then X else example.Class _
{ "id": 1025, "key": { "name": "Lizard", "line": 20 } }
{ "id": 1026, "key": { "name": "Fish", "line": 30 } }
{ "id": 1027, "key": { "name": "Goldfish", "line": 40 } }
```

Please note that `if` cannot be used in stored derived predicates. This
is the case because they require the use of negation, which is disallowed in
stored predicates.

## Arrays

When the schema uses an array, we need to be able to write queries that traverse the elements of the array. For example, a common use of an array is to represent the list of declarations in a source file. Our example schema defines the `FileClasses` predicate:
Expand Down
13 changes: 4 additions & 9 deletions _src/angle/intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,10 @@ return the names of all the member declarations defined in a
JavaScript file `project/myfile.js`:

```
N where
flow.FileDeclaration {
file = "project/myfile.js",
declaration = {
memberDecl = {
name = N
}
}
}
D.declaration.memberDecl?.name
where
D : flow.FileDeclaration;
D.file = src.File "project/myfile.js"
```

To learn about Angle, start with the [Guide](guide.md).
Loading

0 comments on commit fb2beec

Please sign in to comment.