aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2019-03-11 13:59:39 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2019-03-11 13:59:39 +0200
commitc96ecaf239db6d1270958841e2efd9fba3360c6e (patch)
tree990eac20b05a7ddb63311e1cb28ce1fdb28d545d /Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors
parent42a4c114efafe342f562eb8ab8b28e994fccd74c (diff)
downloadTango-c96ecaf239db6d1270958841e2efd9fba3360c6e.tar.gz
Tango-c96ecaf239db6d1270958841e2efd9fba3360c6e.zip
Working on script engine.
Diffstat (limited to 'Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors')
-rw-r--r--Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Highlighting/Resources/CSharp-Mode.xshd2
-rw-r--r--Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/field.pngbin0 -> 395 bytes
-rw-r--r--Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/property.pngbin316 -> 363 bytes
-rw-r--r--Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Intellisense/FieldCompletionItem.cs20
-rw-r--r--Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Intellisense/FieldCompletionItemPopup.cs25
-rw-r--r--Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/ScriptEditor.cs217
-rw-r--r--Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Tango.Scripting.Editors.csproj7
-rw-r--r--Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Themes/Generic.xaml23
8 files changed, 210 insertions, 84 deletions
diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Highlighting/Resources/CSharp-Mode.xshd b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Highlighting/Resources/CSharp-Mode.xshd
index 1ba2cbc6f..40f362e08 100644
--- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Highlighting/Resources/CSharp-Mode.xshd
+++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Highlighting/Resources/CSharp-Mode.xshd
@@ -184,6 +184,8 @@
<Word>dynamic</Word>
<Word>await</Word>
<Word>void</Word>
+ <Word>interface</Word>
+ <Word>this</Word>
</Keywords>
<Keywords color="ExceptionKeywords">
diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/field.png b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/field.png
new file mode 100644
index 000000000..37de414e9
--- /dev/null
+++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/field.png
Binary files differ
diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/property.png b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/property.png
index 001a8c66a..4abd1a4a4 100644
--- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/property.png
+++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Images/property.png
Binary files differ
diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Intellisense/FieldCompletionItem.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Intellisense/FieldCompletionItem.cs
new file mode 100644
index 000000000..3b1996174
--- /dev/null
+++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Intellisense/FieldCompletionItem.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Media.Imaging;
+
+namespace Tango.Scripting.Editors.Intellisense
+{
+ public class FieldCompletionItem : CompletionItem
+ {
+ public override string Text => Name;
+ public override CompletionItemPopupControl PopupControl => new FieldCompletionItemPopup();
+ public override BitmapSource Image => GetImage("field.png");
+
+ public String Name { get; set; }
+ public String Class { get; set; }
+ public String Type { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Intellisense/FieldCompletionItemPopup.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Intellisense/FieldCompletionItemPopup.cs
new file mode 100644
index 000000000..e1ea3ce55
--- /dev/null
+++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Intellisense/FieldCompletionItemPopup.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Tango.Scripting.Editors.Intellisense
+{
+ public class FieldCompletionItemPopup : CompletionItemPopupControl
+ {
+ static FieldCompletionItemPopup()
+ {
+ DefaultStyleKeyProperty.OverrideMetadata(typeof(FieldCompletionItemPopup), new FrameworkPropertyMetadata(typeof(FieldCompletionItemPopup)));
+ }
+ }
+}
diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/ScriptEditor.cs b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/ScriptEditor.cs
index 49d745d6c..64fb0f194 100644
--- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/ScriptEditor.cs
+++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/ScriptEditor.cs
@@ -400,7 +400,7 @@ namespace Tango.Scripting.Editors
if (variableName != null && tree.Count > 1)
{
tree.RemoveAt(0);
- var variables = _parser.GetScriptVariables(Document.Text);
+ var variables = _parser.GetContextSymbols(Document.Text, CaretOffset);
var variable = variables.FirstOrDefault(x => x.Name == variableName);
if (variable != null)
@@ -449,8 +449,6 @@ namespace Tango.Scripting.Editors
private void InvalidateHighlighting()
{
- _parser.GetDeclaredTypes(Text);
-
_knownTypes.Clear();
var assemblies = ReferenceAssemblies.ToList();
@@ -689,7 +687,7 @@ namespace Tango.Scripting.Editors
if (e.Text == " " && GetPreviousWord() == "new")
{
- var s = _parser.GetExpression<FieldDeclarationSyntax>(GetCurrentLineText());
+ var s = _parser.GetExpressionFirst<FieldDeclarationSyntax>(GetCurrentLineText());
if (s != null)
{
@@ -835,100 +833,153 @@ namespace Tango.Scripting.Editors
if (!String.IsNullOrWhiteSpace(word))
{
- if (char.IsUpper(word.First()))
- {
- IList<ICompletionData> data = new List<ICompletionData>();
+ IList<ICompletionData> data = new List<ICompletionData>();
- foreach (var type in _declaredTypes.Where(x => x.Name.StartsWith(word)))
+ foreach (var type in _declaredTypes.Where(x => x.Name.StartsWith(word)))
+ {
+ if (type.TypeKind == TypeKind.Struct)
{
- if (type.TypeKind == TypeKind.Struct)
- {
- data.Add(new StructCompletionItem()
- {
- Name = type.Name,
- Description = "Declared inside the current script...",
- Namespace = type.ContainingNamespace?.Name,
- });
- }
- else if (type.TypeKind == TypeKind.Enum)
+ data.Add(new StructCompletionItem()
{
- data.Add(new EnumCompletionItem()
- {
- Name = type.Name,
- Description = "Declared inside the current script...",
- Namespace = type.ContainingNamespace?.Name,
- });
- }
- else if (type.TypeKind == TypeKind.Interface)
+ Name = type.Name,
+ Description = "Declared inside the current script...",
+ Namespace = type.ContainingNamespace?.Name,
+ Priority = 1,
+ });
+ }
+ else if (type.TypeKind == TypeKind.Enum)
+ {
+ data.Add(new EnumCompletionItem()
{
- data.Add(new InterfaceCompletionItem()
- {
- Name = type.Name,
- Description = "Declared inside the current script...",
- Namespace = type.ContainingNamespace?.Name,
- });
- }
- else if (type.TypeKind == TypeKind.Class)
+ Name = type.Name,
+ Description = "Declared inside the current script...",
+ Namespace = type.ContainingNamespace?.Name,
+ Priority = 1,
+ });
+ }
+ else if (type.TypeKind == TypeKind.Interface)
+ {
+ data.Add(new InterfaceCompletionItem()
{
- data.Add(new ClassCompletionItem()
- {
- Name = type.Name,
- Description = "Declared inside the current script...",
- Namespace = type.ContainingNamespace?.Name,
- });
- }
- else
+ Name = type.Name,
+ Description = "Declared inside the current script...",
+ Namespace = type.ContainingNamespace?.Name,
+ Priority = 1,
+ });
+ }
+ else if (type.TypeKind == TypeKind.Class)
+ {
+ data.Add(new ClassCompletionItem()
{
- throw new NotImplementedException("Implement generic item here!");
- }
+ Name = type.Name,
+ Description = "Declared inside the current script...",
+ Namespace = type.ContainingNamespace?.Name,
+ Priority = 1,
+ });
}
+ else
+ {
+ throw new NotImplementedException("Implement generic item here!");
+ }
+ }
- foreach (var type in _knownTypes.Where(x => x.Name.StartsWith(word)))
+ foreach (var type in _knownTypes.Where(x => x.Name.StartsWith(word)))
+ {
+ if (type.Type.IsEnum)
{
- if (type.Type.IsEnum)
+ data.Add(new EnumCompletionItem()
{
- data.Add(new EnumCompletionItem()
- {
- Namespace = type.Type.Namespace,
- Description = type.Summary,
- Name = type.FriendlyName,
- });
- }
- else if (type.Type.IsInterface)
- {
- data.Add(new InterfaceCompletionItem()
- {
- Name = type.FriendlyName,
- Description = type.Summary,
- Namespace = type.Type.Namespace,
- });
- }
- else if (type.Type.IsValueType)
+ Namespace = type.Type.Namespace,
+ Description = type.Summary,
+ Name = type.FriendlyName,
+ Priority = 0,
+ });
+ }
+ else if (type.Type.IsInterface)
+ {
+ data.Add(new InterfaceCompletionItem()
{
- data.Add(new StructCompletionItem()
- {
- Name = type.FriendlyName,
- Description = type.Summary,
- Namespace = type.Type.Namespace,
- });
- }
- else if (type.Type.IsClass)
+ Name = type.FriendlyName,
+ Description = type.Summary,
+ Namespace = type.Type.Namespace,
+ Priority = 0,
+ });
+ }
+ else if (type.Type.IsValueType)
+ {
+ data.Add(new StructCompletionItem()
{
- data.Add(new ClassCompletionItem()
- {
- Name = type.FriendlyName,
- Description = type.Summary,
- Namespace = type.Type.Namespace,
- });
- }
- else
+ Name = type.FriendlyName,
+ Description = type.Summary,
+ Namespace = type.Type.Namespace,
+ Priority = 0,
+ });
+ }
+ else if (type.Type.IsClass)
+ {
+ data.Add(new ClassCompletionItem()
{
- throw new NotImplementedException("Implement generic item here.");
- }
+ Name = type.FriendlyName,
+ Description = type.Summary,
+ Namespace = type.Type.Namespace,
+ Priority = 0,
+ });
}
+ else
+ {
+ throw new NotImplementedException("Implement generic item here.");
+ }
+ }
- ShowCompletionWindow(data, word);
+ foreach (var symbol in _parser.GetContextSymbols(Document.Text, CaretOffset))
+ {
+ if (symbol.Kind == SymbolKind.Property)
+ {
+ data.Add(new PropertyCompletionItem()
+ {
+ Class = symbol.Class,
+ Description = "Property defined in this script.",
+ Name = symbol.Name,
+ Type = symbol.Type,
+ Priority = 2,
+ });
+ }
+ else if (symbol.Kind == SymbolKind.Field)
+ {
+ data.Add(new FieldCompletionItem()
+ {
+ Class = symbol.Class,
+ Description = "Field defined in this script.",
+ Name = symbol.Name,
+ Type = symbol.Type,
+ Priority = 2,
+ });
+ }
+ else if (symbol.Kind == SymbolKind.Parameter)
+ {
+ data.Add(new FieldCompletionItem()
+ {
+ Class = symbol.Class,
+ Description = "Method parameter defined in this script.",
+ Name = symbol.Name,
+ Type = symbol.Type,
+ Priority = 2,
+ });
+ }
+ else if (symbol.Kind == SymbolKind.Method)
+ {
+ data.Add(new MethodCompletionItem()
+ {
+ Class = symbol.Class,
+ Description = "Method defined in this script.",
+ Name = symbol.Name,
+ ReturnType = symbol.Type,
+ Priority = 2,
+ });
+ }
}
+
+ ShowCompletionWindow(data, word);
}
}
}
@@ -1027,7 +1078,7 @@ namespace Tango.Scripting.Editors
if (variableName != null)
{
tree.RemoveAt(0);
- var variables = _parser.GetScriptVariables(Document.Text);
+ var variables = _parser.GetContextSymbols(Document.Text, CaretOffset);
var variable = variables.FirstOrDefault(x => x.Name == variableName);
if (variable != null)
diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Tango.Scripting.Editors.csproj b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Tango.Scripting.Editors.csproj
index 5422ba805..e5960a664 100644
--- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Tango.Scripting.Editors.csproj
+++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Tango.Scripting.Editors.csproj
@@ -197,6 +197,8 @@
<Compile Include="Intellisense\CompletionItemPopupControl.cs" />
<Compile Include="Intellisense\EnumCompletionItem.cs" />
<Compile Include="Intellisense\EnumCompletionItemPopup.cs" />
+ <Compile Include="Intellisense\FieldCompletionItem.cs" />
+ <Compile Include="Intellisense\FieldCompletionItemPopup.cs" />
<Compile Include="Intellisense\ICompletionItem.cs" />
<Compile Include="Intellisense\ICompletionProvider.cs" />
<Compile Include="Intellisense\InterfaceCompletionItem.cs" />
@@ -615,9 +617,12 @@
<ItemGroup>
<Resource Include="Images\property.png" />
</ItemGroup>
+ <ItemGroup>
+ <Resource Include="Images\field.png" />
+ </ItemGroup>
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_UseGlobalSettings="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_StartDate="2000/1/1" />
+ <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UseGlobalSettings="True" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Themes/Generic.xaml b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Themes/Generic.xaml
index 7a6588239..1ab9dd2db 100644
--- a/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Themes/Generic.xaml
+++ b/Software/Visual_Studio/TEMP/Tango.Scripting/Tango.Scripting.Editors/Themes/Generic.xaml
@@ -531,4 +531,27 @@
</Setter.Value>
</Setter>
</Style>
+
+ <Style TargetType="{x:Type intellisense:FieldCompletionItemPopup}">
+ <Setter Property="Template">
+ <Setter.Value>
+ <ControlTemplate TargetType="{x:Type intellisense:FieldCompletionItemPopup}">
+ <Border Background="{TemplateBinding Background}"
+ BorderBrush="{TemplateBinding BorderBrush}"
+ BorderThickness="{TemplateBinding BorderThickness}">
+
+ <StackPanel>
+ <StackPanel Orientation="Horizontal">
+ <TextBlock Text="{Binding Type}" Foreground="{StaticResource ScriptReferenceTypesBrush}"></TextBlock>
+ <TextBlock Margin="5 0 0 0" Text="{Binding Text}"></TextBlock>
+ </StackPanel>
+
+ <TextBlock Text="{Binding Description}"></TextBlock>
+ </StackPanel>
+
+ </Border>
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ </Style>
</ResourceDictionary>