Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ For detailed API documentation, see [`src/doc/API.md`](src/doc/API.md).

- Uses `tree-sitter-ggsql` grammar (507 lines, simplified approach)
- Parses **full query** (SQL + VISUALISE) into concrete syntax tree (CST)
- Grammar supports: PLOT/TABLE/MAP types, DRAW/SCALE/FACET/PROJECT/LABEL/THEME clauses
- Grammar supports: PLOT/TABLE/MAP types, DRAW/SCALE/FACET/PROJECT/LABEL clauses
- British and American spellings: `VISUALISE` / `VISUALIZE`
- **SQL portion parsing**: Basic SQL structure (SELECT, WITH, CREATE, INSERT, subqueries)
- **Recursive subquery support**: Fully recursive grammar for complex SQL
Expand Down Expand Up @@ -306,7 +306,6 @@ pub struct Plot {
pub facet: Option<Facet>, // FACET clause
pub project: Option<Project>, // PROJECT clause
pub labels: Option<Labels>, // LABEL clause
pub theme: Option<Theme>, // THEME clause
}

/// Global mapping specification from VISUALISE clause
Expand Down Expand Up @@ -1063,7 +1062,6 @@ Where `<global_mapping>` can be:
| `FACET` | ❌ No | Small multiples | `FACET region` |
| `PROJECT` | ❌ No | Coordinate system | `PROJECT TO cartesian` |
| `LABEL` | ❌ No | Text labels | `LABEL title => 'My Chart', x => 'Date'` |
| `THEME` | ❌ No | Visual styling | `THEME minimal` |

### DRAW Clause (Layers)

Expand Down Expand Up @@ -1516,8 +1514,7 @@ Plot {
Scale { aesthetic: "x", scale_type: Some(ScaleType::Date) }
],
facet: Some(Facet::Wrap { variables: ["region"], scales: "fixed" }),
labels: Some(Labels { labels: {"title": "...", "x": "Date", "y": "Total Quantity"} }),
theme: Some(Theme::Minimal)
labels: Some(Labels { labels: {"title": "...", "x": "Date", "y": "Total Quantity"} })
}
```

Expand Down
120 changes: 28 additions & 92 deletions doc/ggsql.xml
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@
<item>PROJECT</item>
<item>FACET</item>
<item>LABEL</item>
<item>THEME</item>
<item>VISUALISE</item>
<item>VISUALIZE</item>
</list>
Expand Down Expand Up @@ -128,7 +127,6 @@
<item>line</item>
<item>path</item>
<item>bar</item>
<item>col</item>
<item>area</item>
<item>rect</item>
<item>polygon</item>
Expand All @@ -148,6 +146,7 @@

<!-- Aesthetics -->
<list name="aesthetics">
<!-- Position aesthetics (cartesian) -->
<item>x</item>
<item>y</item>
<item>xmin</item>
Expand All @@ -156,24 +155,48 @@
<item>ymax</item>
<item>xend</item>
<item>yend</item>
<!-- Position aesthetics (polar) -->
<item>theta</item>
<item>radius</item>
<item>thetamin</item>
<item>thetamax</item>
<item>radiusmin</item>
<item>radiusmax</item>
<item>thetaend</item>
<item>radiusend</item>
<!-- Aggregation aesthetic -->
<item>weight</item>
<!-- Color aesthetics -->
<item>color</item>
<item>colour</item>
<item>fill</item>
<item>stroke</item>
<item>opacity</item>
<!-- Size and shape -->
<item>size</item>
<item>shape</item>
<item>linetype</item>
<item>linewidth</item>
<item>width</item>
<item>height</item>
<item>typeface</item>
<item>fontweight</item>
<item>italic</item>
<!-- Text aesthetics -->
<item>label</item>
<item>family</item>
<item>fontface</item>
<item>hjust</item>
<item>vjust</item>
<!-- Specialty aesthetics -->
<item>slope</item>
<item>intercept</item>
<!-- Facet aesthetics -->
<item>panel</item>
<item>row</item>
<item>column</item>
<!-- Computed variables -->
<item>offset</item>
<item>density</item>
<item>count</item>
<item>intensity</item>
</list>

<!-- Scale Types (only in SCALE context) -->
Expand Down Expand Up @@ -204,23 +227,6 @@
<list name="project_types">
<item>cartesian</item>
<item>polar</item>
<item>flip</item>
<item>fixed</item>
<item>trans</item>
<item>map</item>
<item>quickmap</item>
</list>

<!-- Theme Names (only in THEME context) -->
<list name="theme_names">
<item>minimal</item>
<item>classic</item>
<item>gray</item>
<item>grey</item>
<item>bw</item>
<item>dark</item>
<item>light</item>
<item>void</item>
</list>

<!-- Scale Properties -->
Expand Down Expand Up @@ -254,27 +260,6 @@
<item>tag</item>
</list>

<!-- Theme Properties -->
<list name="theme_properties">
<item>background</item>
<item>panel_background</item>
<item>panel_grid</item>
<item>panel_grid_major</item>
<item>panel_grid_minor</item>
<item>text_size</item>
<item>text_family</item>
<item>title_size</item>
<item>axis_text_size</item>
<item>axis_line</item>
<item>axis_line_width</item>
<item>panel_border</item>
<item>plot_margin</item>
<item>panel_spacing</item>
<item>legend_background</item>
<item>legend_position</item>
<item>legend_direction</item>
</list>

<!-- SQL Functions -->
<list name="sql_functions">
<item>count</item>
Expand Down Expand Up @@ -410,7 +395,6 @@
<WordDetect attribute="Keyword" context="ProjectClause" String="PROJECT" insensitive="true"/>
<WordDetect attribute="Keyword" context="FacetClause" String="FACET" insensitive="true"/>
<WordDetect attribute="Keyword" context="LabelClause" String="LABEL" insensitive="true"/>
<WordDetect attribute="Keyword" context="ThemeClause" String="THEME" insensitive="true"/>

<!-- Fat arrow operator -->
<StringDetect attribute="Operator" context="#stay" String="=&gt;"/>
Expand Down Expand Up @@ -458,7 +442,6 @@
<WordDetect attribute="Keyword" context="ProjectClause" String="PROJECT" insensitive="true"/>
<WordDetect attribute="Keyword" context="FacetClause" String="FACET" insensitive="true"/>
<WordDetect attribute="Keyword" context="LabelClause" String="LABEL" insensitive="true"/>
<WordDetect attribute="Keyword" context="ThemeClause" String="THEME" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="VISUALISE" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="VISUALIZE" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="SELECT" insensitive="true"/>
Expand Down Expand Up @@ -499,7 +482,6 @@
<WordDetect attribute="Keyword" context="ProjectClause" String="PROJECT" insensitive="true"/>
<WordDetect attribute="Keyword" context="FacetClause" String="FACET" insensitive="true"/>
<WordDetect attribute="Keyword" context="LabelClause" String="LABEL" insensitive="true"/>
<WordDetect attribute="Keyword" context="ThemeClause" String="THEME" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="VISUALISE" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="VISUALIZE" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="SELECT" insensitive="true"/>
Expand Down Expand Up @@ -539,7 +521,6 @@
<WordDetect attribute="Keyword" context="ProjectClause" String="PROJECT" insensitive="true"/>
<WordDetect attribute="Keyword" context="FacetClause" String="FACET" insensitive="true"/>
<WordDetect attribute="Keyword" context="LabelClause" String="LABEL" insensitive="true"/>
<WordDetect attribute="Keyword" context="ThemeClause" String="THEME" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="VISUALISE" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="VISUALIZE" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="SELECT" insensitive="true"/>
Expand Down Expand Up @@ -586,7 +567,6 @@
<WordDetect attribute="Keyword" context="ProjectClause" String="PROJECT" insensitive="true"/>
<WordDetect attribute="Keyword" context="FacetClause" String="FACET" insensitive="true"/>
<WordDetect attribute="Keyword" context="LabelClause" String="LABEL" insensitive="true"/>
<WordDetect attribute="Keyword" context="ThemeClause" String="THEME" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="VISUALISE" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="VISUALIZE" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="SELECT" insensitive="true"/>
Expand Down Expand Up @@ -630,7 +610,6 @@
<WordDetect attribute="Keyword" context="ProjectClause" String="PROJECT" insensitive="true"/>
<WordDetect attribute="Keyword" context="FacetClause" String="FACET" insensitive="true"/>
<WordDetect attribute="Keyword" context="LabelClause" String="LABEL" insensitive="true"/>
<WordDetect attribute="Keyword" context="ThemeClause" String="THEME" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="VISUALISE" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="VISUALIZE" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="SELECT" insensitive="true"/>
Expand Down Expand Up @@ -673,7 +652,6 @@
<WordDetect attribute="Keyword" context="ProjectClause" String="PROJECT" insensitive="true"/>
<WordDetect attribute="Keyword" context="FacetClause" String="FACET" insensitive="true"/>
<WordDetect attribute="Keyword" context="LabelClause" String="LABEL" insensitive="true"/>
<WordDetect attribute="Keyword" context="ThemeClause" String="THEME" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="VISUALISE" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="VISUALIZE" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="SELECT" insensitive="true"/>
Expand All @@ -696,47 +674,6 @@
<DetectChar char="," attribute="Symbol" context="#stay"/>
</context>

<!-- THEME clause context -->
<context name="ThemeClause" attribute="Normal Text" lineEndContext="#stay">
<Detect2Chars char="-" char1="-" attribute="Comment" context="Comment"/>
<Detect2Chars char="/" char1="*" attribute="Comment" context="CommentMulti" beginRegion="comment"/>
<DetectChar char="'" attribute="String" context="StringSingle"/>
<DetectChar char="&quot;" attribute="String" context="StringDouble"/>
<RegExpr attribute="Number" context="#stay" String="-?[0-9]+\.?[0-9]*([eE][+-]?[0-9]+)?"/>

<!-- Exit to other clause contexts -->
<WordDetect attribute="Keyword" context="DrawClause" String="DRAW" insensitive="true"/>
<WordDetect attribute="Keyword" context="PlaceClause" String="PLACE" insensitive="true"/>
<WordDetect attribute="Keyword" context="ScaleClause" String="SCALE" insensitive="true"/>
<WordDetect attribute="Keyword" context="ProjectClause" String="PROJECT" insensitive="true"/>
<WordDetect attribute="Keyword" context="FacetClause" String="FACET" insensitive="true"/>
<WordDetect attribute="Keyword" context="LabelClause" String="LABEL" insensitive="true"/>
<WordDetect attribute="Keyword" context="ThemeClause" String="THEME" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="VISUALISE" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="VISUALIZE" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="SELECT" insensitive="true"/>
<WordDetect attribute="Keyword" context="#stay" String="FROM" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="WHERE" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="WITH" insensitive="true"/>

<!-- Theme names - only highlighted here -->
<keyword attribute="Data Type" context="#stay" String="theme_names"/>

<!-- Theme properties -->
<keyword attribute="Attribute" context="#stay" String="theme_properties"/>

<!-- Sub-keywords -->
<keyword attribute="Keyword" context="#stay" String="viz_subkeywords"/>

<StringDetect attribute="Operator" context="#stay" String="=&gt;"/>
<AnyChar attribute="Operator" context="#stay" String="=!&lt;&gt;+-*/%"/>
<DetectChar char="(" attribute="Symbol" context="#stay"/>
<DetectChar char=")" attribute="Symbol" context="#stay"/>
<DetectChar char="[" attribute="Symbol" context="#stay"/>
<DetectChar char="]" attribute="Symbol" context="#stay"/>
<DetectChar char="," attribute="Symbol" context="#stay"/>
</context>

<!-- VISUALISE clause context -->
<context name="VisualiseClause" attribute="Normal Text" lineEndContext="#stay">
<Detect2Chars char="-" char1="-" attribute="Comment" context="Comment"/>
Expand All @@ -752,7 +689,6 @@
<WordDetect attribute="Keyword" context="ProjectClause" String="PROJECT" insensitive="true"/>
<WordDetect attribute="Keyword" context="FacetClause" String="FACET" insensitive="true"/>
<WordDetect attribute="Keyword" context="LabelClause" String="LABEL" insensitive="true"/>
<WordDetect attribute="Keyword" context="ThemeClause" String="THEME" insensitive="true"/>
<WordDetect attribute="Keyword" context="VisualiseClause" String="VISUALISE" insensitive="true"/>
<WordDetect attribute="Keyword" context="VisualiseClause" String="VISUALIZE" insensitive="true"/>
<WordDetect attribute="Keyword" context="Normal" String="SELECT" insensitive="true"/>
Expand Down
6 changes: 0 additions & 6 deletions ggsql-vscode/examples/sample.gsql
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ DRAW point
LABEL title => 'Horsepower vs Fuel Efficiency',
x => 'Horsepower',
y => 'Miles per Gallon'
THEME minimal

-- ============================================================================
-- Example 2: Multi-Layer Visualization with CTE
Expand All @@ -34,7 +33,6 @@ LABEL title => 'Sales Trends by Region',
x => 'Month',
y => 'Total Quantity',
caption => 'Data from 2024'
THEME classic

-- ============================================================================
-- Example 3: Bar Chart with Projection
Expand All @@ -51,7 +49,6 @@ PROJECT y, x TO cartesian
LABEL title => 'Top 10 Product Categories',
x => 'Category',
y => 'Total Sales'
THEME dark

-- ============================================================================
-- Example 4: Polar Projection (Pie Chart)
Expand Down Expand Up @@ -107,7 +104,6 @@ LABEL title => 'Temperature Range (Last 30 Days)',
x => 'Date',
y => 'Temperature (°C)',
caption => 'Source: Weather Station Alpha'
THEME minimal

-- ============================================================================
-- Example 7: Complex Join with Multiple Aesthetics
Expand All @@ -134,7 +130,6 @@ LABEL title => 'Sales Performance Analysis',
y => 'Revenue (log scale)',
color => 'Product Category',
size => 'Quantity Sold'
THEME grey

-- ============================================================================
-- Example 8: Area Chart with Stacking
Expand Down Expand Up @@ -170,7 +165,6 @@ SCALE y FROM [0, 500]
LABEL title => 'Price Distribution by Category',
x => 'Product Category',
y => 'Price ($)'
THEME bw

-- ============================================================================
-- Example 10: Annotated Scatter Plot
Expand Down
Loading
Loading