diff --git a/CodeCompletion/CodeCompletion.cs b/CodeCompletion/CodeCompletion.cs index 1f036c5d7..7cb998949 100644 --- a/CodeCompletion/CodeCompletion.cs +++ b/CodeCompletion/CodeCompletion.cs @@ -20,7 +20,7 @@ namespace CodeCompletion public Dictionary docs = new Dictionary(); static bool parsers_loaded=false; public IParser Parser; - + static CodeCompletionController() { //ParsersController.Reload(); diff --git a/CodeCompletion/DomSyntaxTreeVisitor.cs b/CodeCompletion/DomSyntaxTreeVisitor.cs index 0d120975d..58b4334ef 100644 --- a/CodeCompletion/DomSyntaxTreeVisitor.cs +++ b/CodeCompletion/DomSyntaxTreeVisitor.cs @@ -69,7 +69,7 @@ namespace CodeCompletion //throw e; //System.Diagnostics.Debug.WriteLine(e.StackTrace); } - if (use_semantic_for_intellisense && cu.file_name.IndexOf("PABCSystem.pas") == -1) + if (use_semantic_for_intellisense && !parse_only_interface) try { CorrectTreeWithSemantic(cu); @@ -90,15 +90,16 @@ namespace CodeCompletion var ntr = new named_type_reference(); ttr.name = ntr; ttr.params_list = new template_param_list(); - var arr = tn.full_name.Split('.'); - foreach (string s in arr) + var arr = tn.original_generic.full_name.Split('.'); + for (int i = 0; i < arr.Length; i++) { - if (s.IndexOf("<") == -1) + var s = arr[i]; + if (i < arr.Length - 1) ntr.names.Add(new ident(s)); else { var id = new ident_with_templateparams(); - ntr.Add(new ident(s.Substring(0, s.IndexOf("<")))); + ntr.Add(new ident(s)); foreach (var gen_td in tn.instance_params) ttr.params_list.Add(BuildSyntaxNodeForTypeReference(gen_td)); } @@ -108,7 +109,11 @@ namespace CodeCompletion else { var ntr = new named_type_reference(); - + if (tn.IsDelegate) + { + ntr.names.Add(new ident(tn.PrintableName.Replace("()", ""))); + return ntr; + } var arr = tn.full_name.Split('.'); foreach (string s in arr) { @@ -138,7 +143,7 @@ namespace CodeCompletion if (ts is TypeSynonim) { var corrected_type = GetCorrectedType((ts as TypeSynonim).actType, tn, topScope); - if (corrected_type != (ts as TypeSynonim).actType) + if (!corrected_type.IsEqual((ts as TypeSynonim).actType)) return corrected_type; return ts; } @@ -146,7 +151,11 @@ namespace CodeCompletion { var ctn = tn as compiled_type_node; if (ctn.compiled_type.IsArray) + { + if (ctn.rank > 1) + return new ArrayScope(GetIntellisenseTypeByType((ctn.element_type as compiled_type_node).compiled_type), new TypeScope[ctn.rank]); return new ArrayScope(GetIntellisenseTypeByType((ctn.element_type as compiled_type_node).compiled_type), null); + } if (ctn.compiled_type.GetGenericArguments().Length == 0) return TypeTable.get_compiled_type(ctn.compiled_type); else @@ -158,11 +167,22 @@ namespace CodeCompletion } return CompiledScope.get_type_instance(ctn.compiled_type.GetGenericTypeDefinition(), gen_args); } - } + } + else if (tn is ref_type_node && ts is PointerScope) + { + var corrected_type = GetCorrectedType((ts as PointerScope).elementType, tn.element_type, topScope); + if (!corrected_type.IsEqual((ts as PointerScope).elementType)) + return new PointerScope(corrected_type); + return ts; + } else { if (tn.full_name.IndexOf("$") != -1 || tn.full_name.IndexOf("#") != -1) return ts; + if (ts is FileScope && tn.type_special_kind == PascalABCCompiler.SemanticTree.type_special_kind.typed_file) + return ts; + if (ts is FileScope && tn.type_special_kind == PascalABCCompiler.SemanticTree.type_special_kind.binary_file) + return ts; var ntr = BuildSyntaxNodeForTypeReference(tn); cur_scope = topScope; diff --git a/CodeCompletion/Testing.cs b/CodeCompletion/Testing.cs index aa3d0ae2a..8e080ba77 100644 --- a/CodeCompletion/Testing.cs +++ b/CodeCompletion/Testing.cs @@ -28,6 +28,7 @@ namespace CodeCompletion //string dir = Path.Combine(@"c:\Work\Miks\_PABCNETGitHub\TestSuite", "intellisense_tests"); var comp = new PascalABCCompiler.Compiler(); var controller = new CodeCompletion.CodeCompletionController(); + CodeCompletion.DomSyntaxTreeVisitor.use_semantic_for_intellisense = true; CodeCompletion.CodeCompletionController.comp = comp; CodeCompletion.CodeCompletionController.SetParser(".pas"); CodeCompletion.CodeCompletionController.ParsersController = comp.ParsersController; @@ -54,7 +55,7 @@ namespace CodeCompletion if (desc == null) desc = ""; desc = desc.Split(new string[] { "\n"},StringSplitOptions.None)[0].Trim(); - assert(desc.Replace(", ", ",") == should_desc.Replace(", ",","), FileName+", should: "+should_desc+", is: "+desc); + assert(string.Compare(desc.Replace(", ", ","), should_desc.Replace(", ", ","), true) == 0, FileName+", should: "+should_desc+", is: "+desc); tmp = tmp.Remove(ind, tmp.IndexOf("@}") + 2 - ind); ind = tmp.IndexOf("{@"); } @@ -71,7 +72,7 @@ namespace CodeCompletion if (desc == null) desc = ""; desc = desc.Split(new string[] { "\n" }, StringSplitOptions.None)[0].Trim(); - assert(desc.Replace(", ", ",") == should_desc.Replace(", ", ","), FileName + ", should: " + should_desc + ", is: " + desc); + assert(string.Compare(desc.Replace(", ", ","), should_desc.Replace(", ", ","), true) == 0, FileName + ", should: " + should_desc + ", is: " + desc); tmp = tmp.Remove(ind, tmp.IndexOf("]}") + 2 - ind); ind = tmp.IndexOf("{["); } @@ -88,7 +89,7 @@ namespace CodeCompletion if (desc == null) desc = ""; desc = desc.Split(new string[] { "\n" }, StringSplitOptions.None)[0].Trim(); - assert(desc.Replace(", ", ",") == should_desc.Replace(", ", ","), FileName + ", should: " + should_desc + ", is: " + desc); + assert(string.Compare(desc.Replace(", ", ","), should_desc.Replace(", ", ","), true) == 0, FileName + ", should: " + should_desc + ", is: " + desc); tmp = tmp.Remove(ind, tmp.IndexOf(")}") + 2 - ind); ind = tmp.IndexOf("{("); } diff --git a/PluginsSupport/Interfaces.cs b/PluginsSupport/Interfaces.cs index dcb427a52..4d339f3d6 100644 --- a/PluginsSupport/Interfaces.cs +++ b/PluginsSupport/Interfaces.cs @@ -242,6 +242,7 @@ namespace VisualPascalABCPlugins bool UseDllForSystemUnits { get; set; } bool PABCDllChecked { get; set; } bool AutoInsertCodeIsEnabledOnStartup { get; set; } + bool UseSemanticIntellisense { get; set; } } public interface IListItem diff --git a/TestSuite/intellisense_tests/dict1.pas b/TestSuite/intellisense_tests/dict1.pas index cfcb2711a..38c01aa76 100644 --- a/TestSuite/intellisense_tests/dict1.pas +++ b/TestSuite/intellisense_tests/dict1.pas @@ -1,10 +1,11 @@ begin - var Floors := new Dictionary<(cardinal, cardinal), List>; + var Floors := new Dictionary<(longword, longword), List>; var sz := (1, 2); - foreach var a{@var a: (cardinal,cardinal);@} in Floors.Keys do + foreach var a{@var a: (longword,longword);@} in Floors.Keys do begin end; var l{@var l: List;@} := Floors[sz]; l.Add(23); + end. \ No newline at end of file diff --git a/TestSuite/intellisense_tests/dotquestion1.pas b/TestSuite/intellisense_tests/dotquestion1.pas index e65bca75e..77ef079a0 100644 --- a/TestSuite/intellisense_tests/dotquestion1.pas +++ b/TestSuite/intellisense_tests/dotquestion1.pas @@ -1,4 +1,5 @@ -type +//!semantic +type TClass = class fX: byte; @@ -9,7 +10,7 @@ begin var instance := new TClass(); - var x1{@var x1: byte;@} := instance?.fX; - var x3{@var x3: integer;@} := instance?.F; + var x1{@var x1: Nullable;@} := instance?.fX; + var x3{@var x3: Nullable;@} := instance?.F; writeln(instance?.F{@function TClass.F(): integer;@}); end. \ No newline at end of file diff --git a/TestSuite/intellisense_tests/foreach6.pas b/TestSuite/intellisense_tests/foreach6.pas new file mode 100644 index 000000000..4d14e9cfe --- /dev/null +++ b/TestSuite/intellisense_tests/foreach6.pas @@ -0,0 +1,7 @@ +//!semantic +{$reference system.windows.forms.dll} +begin + var coll: system.windows.forms.ListBox.SelectedIndexCollection; + foreach var a in coll do + a{@var a: Object;@}.IsEven.print; +end. \ No newline at end of file diff --git a/TestSuite/intellisense_tests/generics23.pas b/TestSuite/intellisense_tests/generics23.pas new file mode 100644 index 000000000..0898e0004 --- /dev/null +++ b/TestSuite/intellisense_tests/generics23.pas @@ -0,0 +1,4 @@ +//!semantic +begin + var q{@var q: sequence of real;@} := Arr(1,2,3).Select(x->1/x); +end. \ No newline at end of file diff --git a/TestSuite/intellisense_tests/generics24.pas b/TestSuite/intellisense_tests/generics24.pas new file mode 100644 index 000000000..2a2e846fe --- /dev/null +++ b/TestSuite/intellisense_tests/generics24.pas @@ -0,0 +1,6 @@ +//!semantic +begin + Arr(1,2,3).Aggregate(1.0, (y, x{@parameter x: integer;@}) -> + (y{@parameter y: real;@} * (x mod 10))); + ReadArrInteger(10).Where((x, i) -> i{@parameter i: integer;@} mod 2 = 0); +end. \ No newline at end of file diff --git a/TestSuite/intellisense_tests/generics25.pas b/TestSuite/intellisense_tests/generics25.pas new file mode 100644 index 000000000..9d16e2775 --- /dev/null +++ b/TestSuite/intellisense_tests/generics25.pas @@ -0,0 +1,5 @@ +//!semantic +begin + var a: array of integer; + a.Min(p -> p{@parameter p: integer;@}[0]); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Foreach.cs b/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Foreach.cs index 0d8b1af28..78506773f 100644 --- a/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Foreach.cs +++ b/TreeConverter/TreeConversion/SyntaxTreeVisitorNodes/Foreach.cs @@ -125,7 +125,6 @@ namespace PascalABCCompiler.TreeConverter { semantic_check_extended_foreach(vars, elem_type, foreachCollection.location); } - CheckToEmbeddedStatementCannotBeADeclaration(_foreach_stmt.stmt); foreachVariable = FindForeachVariable(_foreach_stmt, elem_type, sys_coll_ienum); diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 8580a5f5f..1b86ef785 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -15749,21 +15749,17 @@ namespace PascalABCCompiler.TreeConverter public override void visit(SyntaxTree.if_node _if_node) { - expression_node condition = convert_strong(_if_node.condition); - condition = convertion_data_and_alghoritms.convert_type(condition, SystemLibrary.SystemLibrary.bool_type); - try_convert_typed_expression_to_function_call(ref condition, true); - // SSM 29/08/16 - /*var cc = condition as bool_const_node; - if (cc != null && cc.constant_value == false && _if_node.else_body == null) + expression_node condition = null; + if (!for_intellisense) { - // недостижимый код - ничего не генерировать - return_value(new empty_statement(get_location(_if_node))); - // перед этим надо обходить then_body - return; - }*/ + condition = convert_strong(_if_node.condition); + condition = convertion_data_and_alghoritms.convert_type(condition, SystemLibrary.SystemLibrary.bool_type); + try_convert_typed_expression_to_function_call(ref condition, true); - CheckToEmbeddedStatementCannotBeADeclaration(_if_node.then_body); - CheckToEmbeddedStatementCannotBeADeclaration(_if_node.else_body); + CheckToEmbeddedStatementCannotBeADeclaration(_if_node.then_body); + CheckToEmbeddedStatementCannotBeADeclaration(_if_node.else_body); + } + statements_list sl = new statements_list(get_location(_if_node.then_body)); convertion_data_and_alghoritms.statement_list_stack_push(sl); @@ -15805,10 +15801,14 @@ namespace PascalABCCompiler.TreeConverter public override void visit(SyntaxTree.while_node _while_node) { - expression_node expr = convert_strong(_while_node.expr); - expr = convertion_data_and_alghoritms.convert_type(expr, SystemLibrary.SystemLibrary.bool_type); - try_convert_typed_expression_to_function_call(ref expr, true); - CheckToEmbeddedStatementCannotBeADeclaration(_while_node.statements); + expression_node expr = null; + if (!for_intellisense) + { + expr = convert_strong(_while_node.expr); + expr = convertion_data_and_alghoritms.convert_type(expr, SystemLibrary.SystemLibrary.bool_type); + try_convert_typed_expression_to_function_call(ref expr, true); + CheckToEmbeddedStatementCannotBeADeclaration(_while_node.statements); + } while_node wn = new while_node(expr, get_location(_while_node)); context.cycle_stack.push(wn); @@ -15853,10 +15853,14 @@ namespace PascalABCCompiler.TreeConverter } rep.body = st; - expression_node expr = convert_strong(_repeat_node.expr); - expr = convertion_data_and_alghoritms.convert_type(expr, SystemLibrary.SystemLibrary.bool_type); - try_convert_typed_expression_to_function_call(ref expr, true); - rep.condition = expr; + expression_node expr = null; + if (!for_intellisense) + { + expr = convert_strong(_repeat_node.expr); + expr = convertion_data_and_alghoritms.convert_type(expr, SystemLibrary.SystemLibrary.bool_type); + try_convert_typed_expression_to_function_call(ref expr, true); + rep.condition = expr; + } context.cycle_stack.pop(); return_value(rep); } @@ -16078,6 +16082,12 @@ namespace PascalABCCompiler.TreeConverter { AddError(loc, "NO_DEFAULT_PROPERTY_TO_FUNCTION_TYPE"); } + if (for_intellisense) + { + return_value(expr); + return; + } + } if (expr.type.default_property_node.polymorphic_state == SemanticTree.polymorphic_state.ps_static) @@ -17933,6 +17943,16 @@ namespace PascalABCCompiler.TreeConverter statement syntax_statement = _statement_list.subnodes[i]; try { + if (for_intellisense) + { + if (syntax_statement is assign && !(context.converted_func_stack.top() != null && context.converted_func_stack.top().return_value_type is undefined_type) + || syntax_statement is procedure_call || syntax_statement is raise_statement) + { + + if (!(new LambdaSearcher(syntax_statement).CheckIfContainsLambdas())) + continue; + } + } statement_node semantic_statement = convert_strong(syntax_statement); if (semantic_statement != null) { diff --git a/VisualPascalABCNET/OptionsContent/IntelliseseOptionsContent.Designer.cs b/VisualPascalABCNET/OptionsContent/IntelliseseOptionsContent.Designer.cs index fae043a2b..f084c696a 100644 --- a/VisualPascalABCNET/OptionsContent/IntelliseseOptionsContent.Designer.cs +++ b/VisualPascalABCNET/OptionsContent/IntelliseseOptionsContent.Designer.cs @@ -36,6 +36,7 @@ namespace VisualPascalABC.OptionsContent this.cbCodeCompletionDot = new System.Windows.Forms.CheckBox(); this.cbCodeCompletionHint = new System.Windows.Forms.CheckBox(); this.cbIntellisencePanel = new System.Windows.Forms.CheckBox(); + this.cbUseSemanticIntellisense = new System.Windows.Forms.CheckBox(); ((System.ComponentModel.ISupportInitialize)(this.nuNamespaceVisibleRange)).BeginInit(); this.SuspendLayout(); // @@ -45,11 +46,10 @@ namespace VisualPascalABC.OptionsContent this.cbCodeCompletionKeyPressed.CheckAlign = System.Drawing.ContentAlignment.MiddleRight; this.cbCodeCompletionKeyPressed.Checked = true; this.cbCodeCompletionKeyPressed.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbCodeCompletionKeyPressed.Location = new System.Drawing.Point(23, 110); - this.cbCodeCompletionKeyPressed.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.cbCodeCompletionKeyPressed.Location = new System.Drawing.Point(17, 89); this.cbCodeCompletionKeyPressed.Name = "cbCodeCompletionKeyPressed"; this.cbCodeCompletionKeyPressed.RightToLeft = System.Windows.Forms.RightToLeft.Yes; - this.cbCodeCompletionKeyPressed.Size = new System.Drawing.Size(264, 21); + this.cbCodeCompletionKeyPressed.Size = new System.Drawing.Size(210, 17); this.cbCodeCompletionKeyPressed.TabIndex = 38; this.cbCodeCompletionKeyPressed.Text = "CODE_COMPLETION_KEYPRESSED"; this.cbCodeCompletionKeyPressed.UseVisualStyleBackColor = true; @@ -57,24 +57,22 @@ namespace VisualPascalABC.OptionsContent // label5 // this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(91, 170); - this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label5.Location = new System.Drawing.Point(68, 138); this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(207, 17); + this.label5.Size = new System.Drawing.Size(163, 13); this.label5.TabIndex = 37; this.label5.Text = "NAMESPACE_VISIBLE_RANGE"; // // nuNamespaceVisibleRange // - this.nuNamespaceVisibleRange.Location = new System.Drawing.Point(23, 165); - this.nuNamespaceVisibleRange.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.nuNamespaceVisibleRange.Location = new System.Drawing.Point(17, 134); this.nuNamespaceVisibleRange.Maximum = new decimal(new int[] { 32, 0, 0, 0}); this.nuNamespaceVisibleRange.Name = "nuNamespaceVisibleRange"; - this.nuNamespaceVisibleRange.Size = new System.Drawing.Size(64, 22); + this.nuNamespaceVisibleRange.Size = new System.Drawing.Size(48, 20); this.nuNamespaceVisibleRange.TabIndex = 36; this.nuNamespaceVisibleRange.Value = new decimal(new int[] { 3, @@ -88,11 +86,10 @@ namespace VisualPascalABC.OptionsContent this.cbAllowCodeCompletion.CheckAlign = System.Drawing.ContentAlignment.MiddleRight; this.cbAllowCodeCompletion.Checked = true; this.cbAllowCodeCompletion.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbAllowCodeCompletion.Location = new System.Drawing.Point(7, 6); - this.cbAllowCodeCompletion.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.cbAllowCodeCompletion.Location = new System.Drawing.Point(5, 5); this.cbAllowCodeCompletion.Name = "cbAllowCodeCompletion"; this.cbAllowCodeCompletion.RightToLeft = System.Windows.Forms.RightToLeft.Yes; - this.cbAllowCodeCompletion.Size = new System.Drawing.Size(221, 21); + this.cbAllowCodeCompletion.Size = new System.Drawing.Size(176, 17); this.cbAllowCodeCompletion.TabIndex = 35; this.cbAllowCodeCompletion.Text = "ALLOW_CODE_COMPLETION"; this.cbAllowCodeCompletion.UseVisualStyleBackColor = true; @@ -104,11 +101,10 @@ namespace VisualPascalABC.OptionsContent this.cbCodeCompletionParams.CheckAlign = System.Drawing.ContentAlignment.MiddleRight; this.cbCodeCompletionParams.Checked = true; this.cbCodeCompletionParams.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbCodeCompletionParams.Location = new System.Drawing.Point(23, 84); - this.cbCodeCompletionParams.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.cbCodeCompletionParams.Location = new System.Drawing.Point(17, 68); this.cbCodeCompletionParams.Name = "cbCodeCompletionParams"; this.cbCodeCompletionParams.RightToLeft = System.Windows.Forms.RightToLeft.Yes; - this.cbCodeCompletionParams.Size = new System.Drawing.Size(229, 21); + this.cbCodeCompletionParams.Size = new System.Drawing.Size(183, 17); this.cbCodeCompletionParams.TabIndex = 34; this.cbCodeCompletionParams.Text = "CODE_COMPLETION_PARAMS"; this.cbCodeCompletionParams.UseVisualStyleBackColor = true; @@ -119,11 +115,10 @@ namespace VisualPascalABC.OptionsContent this.cbCodeCompletionDot.CheckAlign = System.Drawing.ContentAlignment.MiddleRight; this.cbCodeCompletionDot.Checked = true; this.cbCodeCompletionDot.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbCodeCompletionDot.Location = new System.Drawing.Point(23, 58); - this.cbCodeCompletionDot.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.cbCodeCompletionDot.Location = new System.Drawing.Point(17, 47); this.cbCodeCompletionDot.Name = "cbCodeCompletionDot"; this.cbCodeCompletionDot.RightToLeft = System.Windows.Forms.RightToLeft.Yes; - this.cbCodeCompletionDot.Size = new System.Drawing.Size(202, 21); + this.cbCodeCompletionDot.Size = new System.Drawing.Size(161, 17); this.cbCodeCompletionDot.TabIndex = 33; this.cbCodeCompletionDot.Text = "CODE_COMPLETION_DOT"; this.cbCodeCompletionDot.UseVisualStyleBackColor = true; @@ -134,11 +129,10 @@ namespace VisualPascalABC.OptionsContent this.cbCodeCompletionHint.CheckAlign = System.Drawing.ContentAlignment.MiddleRight; this.cbCodeCompletionHint.Checked = true; this.cbCodeCompletionHint.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbCodeCompletionHint.Location = new System.Drawing.Point(23, 32); - this.cbCodeCompletionHint.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.cbCodeCompletionHint.Location = new System.Drawing.Point(17, 26); this.cbCodeCompletionHint.Name = "cbCodeCompletionHint"; this.cbCodeCompletionHint.RightToLeft = System.Windows.Forms.RightToLeft.Yes; - this.cbCodeCompletionHint.Size = new System.Drawing.Size(204, 21); + this.cbCodeCompletionHint.Size = new System.Drawing.Size(164, 17); this.cbCodeCompletionHint.TabIndex = 32; this.cbCodeCompletionHint.Text = "CODE_COMPLETION_HINT"; this.cbCodeCompletionHint.UseVisualStyleBackColor = true; @@ -149,19 +143,30 @@ namespace VisualPascalABC.OptionsContent this.cbIntellisencePanel.CheckAlign = System.Drawing.ContentAlignment.MiddleRight; this.cbIntellisencePanel.Checked = true; this.cbIntellisencePanel.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbIntellisencePanel.Location = new System.Drawing.Point(23, 136); - this.cbIntellisencePanel.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.cbIntellisencePanel.Location = new System.Drawing.Point(17, 110); this.cbIntellisencePanel.Name = "cbIntellisencePanel"; this.cbIntellisencePanel.RightToLeft = System.Windows.Forms.RightToLeft.Yes; - this.cbIntellisencePanel.Size = new System.Drawing.Size(227, 21); + this.cbIntellisencePanel.Size = new System.Drawing.Size(183, 17); this.cbIntellisencePanel.TabIndex = 39; this.cbIntellisencePanel.Text = "SHOW_INTELLISENCE_PANEL"; this.cbIntellisencePanel.UseVisualStyleBackColor = true; // + // cbUseSemanticIntellisense + // + this.cbUseSemanticIntellisense.AutoSize = true; + this.cbUseSemanticIntellisense.Location = new System.Drawing.Point(17, 161); + this.cbUseSemanticIntellisense.Name = "cbUseSemanticIntellisense"; + this.cbUseSemanticIntellisense.Size = new System.Drawing.Size(191, 17); + this.cbUseSemanticIntellisense.TabIndex = 40; + this.cbUseSemanticIntellisense.Text = "USE_SEMANTIC_INTELLISENSE"; + this.cbUseSemanticIntellisense.UseVisualStyleBackColor = true; + this.cbUseSemanticIntellisense.CheckedChanged += new System.EventHandler(this.cbUseSemanticIntellisense_CheckedChanged); + // // IntelliseseOptionsContent // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.cbUseSemanticIntellisense); this.Controls.Add(this.cbIntellisencePanel); this.Controls.Add(this.cbCodeCompletionKeyPressed); this.Controls.Add(this.label5); @@ -170,9 +175,8 @@ namespace VisualPascalABC.OptionsContent this.Controls.Add(this.cbCodeCompletionParams); this.Controls.Add(this.cbCodeCompletionDot); this.Controls.Add(this.cbCodeCompletionHint); - this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); this.Name = "IntelliseseOptionsContent"; - this.Size = new System.Drawing.Size(701, 260); + this.Size = new System.Drawing.Size(526, 211); ((System.ComponentModel.ISupportInitialize)(this.nuNamespaceVisibleRange)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -189,5 +193,6 @@ namespace VisualPascalABC.OptionsContent private System.Windows.Forms.CheckBox cbCodeCompletionDot; private System.Windows.Forms.CheckBox cbCodeCompletionHint; private System.Windows.Forms.CheckBox cbIntellisencePanel; + private System.Windows.Forms.CheckBox cbUseSemanticIntellisense; } } diff --git a/VisualPascalABCNET/OptionsContent/IntelliseseOptionsContent.cs b/VisualPascalABCNET/OptionsContent/IntelliseseOptionsContent.cs index 7cdaaba98..86dea0f48 100644 --- a/VisualPascalABCNET/OptionsContent/IntelliseseOptionsContent.cs +++ b/VisualPascalABCNET/OptionsContent/IntelliseseOptionsContent.cs @@ -59,6 +59,7 @@ namespace VisualPascalABC.OptionsContent cbCodeCompletionKeyPressed.Checked = MainForm.UserOptions.EnableSmartIntellisense; nuNamespaceVisibleRange.Value = MainForm.UserOptions.CodeCompletionNamespaceVisibleRange; cbIntellisencePanel.Checked = MainForm.UserOptions.ShowQuickClassBrowserPanel; + cbUseSemanticIntellisense.Checked = MainForm.UserOptions.UseSemanticIntellisense; alreadyShown = true; } break; @@ -70,6 +71,7 @@ namespace VisualPascalABC.OptionsContent MainForm.UserOptions.EnableSmartIntellisense = cbCodeCompletionKeyPressed.Checked; MainForm.UserOptions.CodeCompletionNamespaceVisibleRange = Convert.ToInt32(nuNamespaceVisibleRange.Value); MainForm.UserOptions.ShowQuickClassBrowserPanel = cbIntellisencePanel.Checked; + MainForm.UserOptions.UseSemanticIntellisense = cbUseSemanticIntellisense.Checked; MainForm.UpdateUserOptions(); alreadyShown = false; WorkbenchServiceFactory.OptionsService.SaveOptions(); @@ -84,9 +86,13 @@ namespace VisualPascalABC.OptionsContent private void cbAllowCodeCompletion_CheckedChanged(object sender, EventArgs e) { - cbIntellisencePanel.Checked = cbCodeCompletionKeyPressed.Checked = cbCodeCompletionDot.Checked = cbCodeCompletionHint.Checked = cbCodeCompletionParams.Checked = cbAllowCodeCompletion.Checked; - cbIntellisencePanel.Enabled = cbCodeCompletionKeyPressed.Enabled = nuNamespaceVisibleRange.Enabled = cbCodeCompletionDot.Enabled = cbCodeCompletionHint.Enabled = cbCodeCompletionParams.Enabled = cbAllowCodeCompletion.Checked; + cbIntellisencePanel.Checked = cbUseSemanticIntellisense.Checked = cbCodeCompletionKeyPressed.Checked = cbCodeCompletionDot.Checked = cbCodeCompletionHint.Checked = cbCodeCompletionParams.Checked = cbAllowCodeCompletion.Checked; + cbIntellisencePanel.Enabled = cbUseSemanticIntellisense.Enabled = cbCodeCompletionKeyPressed.Enabled = nuNamespaceVisibleRange.Enabled = cbCodeCompletionDot.Enabled = cbCodeCompletionHint.Enabled = cbCodeCompletionParams.Enabled = cbAllowCodeCompletion.Checked; + } + + private void cbUseSemanticIntellisense_CheckedChanged(object sender, EventArgs e) + { + CodeCompletion.DomSyntaxTreeVisitor.use_semantic_for_intellisense = cbUseSemanticIntellisense.Checked; } - } } diff --git a/VisualPascalABCNET/OptionsContent/IntelliseseOptionsContent.resx b/VisualPascalABCNET/OptionsContent/IntelliseseOptionsContent.resx index 19dc0dd8b..d58980a38 100644 --- a/VisualPascalABCNET/OptionsContent/IntelliseseOptionsContent.resx +++ b/VisualPascalABCNET/OptionsContent/IntelliseseOptionsContent.resx @@ -112,9 +112,9 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 \ No newline at end of file diff --git a/VisualPascalABCNET/UserOptions.cs b/VisualPascalABCNET/UserOptions.cs index 1a8a89434..afcb30806 100644 --- a/VisualPascalABCNET/UserOptions.cs +++ b/VisualPascalABCNET/UserOptions.cs @@ -31,6 +31,7 @@ namespace VisualPascalABC public bool ShowCompletionInfoByGroup = true; public bool EnableSmartIntellisense = false; public bool ShowQuickClassBrowserPanel = false; + public bool UseSemanticIntellisense = false; public bool AllowCodeFormatting = false; public bool SkipStackTraceItemIfSourceFileInSystemDirectory = true; public bool AlwaysAttachDebuggerAtStart = false; @@ -256,6 +257,12 @@ namespace VisualPascalABC set { PABCDllChecked = value; } } + bool VisualPascalABCPlugins.IUserOptions.UseSemanticIntellisense + { + get { return UseSemanticIntellisense; } + set { UseSemanticIntellisense = value; } + } + #endregion } } diff --git a/VisualPascalABCNET/Workbench/OptionsManager.cs b/VisualPascalABCNET/Workbench/OptionsManager.cs index 845d16d6d..cf228a85c 100644 --- a/VisualPascalABCNET/Workbench/OptionsManager.cs +++ b/VisualPascalABCNET/Workbench/OptionsManager.cs @@ -58,6 +58,7 @@ namespace VisualPascalABC private string OptionsItemNameDockLeftPortion = "DockLeftPortion"; private string OptionsItemNameDockRightPortion = "DockRightPortion"; private string OptionsItemNameShowQuickClassBrowserPanel = "ShowQuickClassBrowserPanel"; + private string OptionsItemNameUseSemanticIntellisense = "UseSemanticIntellisense"; private string OptionsItemNameSkipStackTraceItemIfSourceFileInSystemDirectory = "SkipStakTraceItemIfSourceFileInSystemDirectory"; private string OptionsItemNameShowFoundedNamesTab = "ShowFoundedNamesTab"; private string OptionsItemNameShowWatchTab = "ShowWatchTab"; @@ -237,6 +238,8 @@ namespace VisualPascalABC UserOptions.UseDllForSystemUnits = Convert.ToBoolean(value); if ((value = (string)Options[OptionsItemPABCDllChecked]) != null) UserOptions.PABCDllChecked = Convert.ToBoolean(value); + if ((value = (string)Options[OptionsItemNameUseSemanticIntellisense]) != null) + UserOptions.UseSemanticIntellisense = Convert.ToBoolean(value); int i = 0; while ((value = (string)Options[OptionsItemNameLastFile + (i++).ToString()]) != null) AddLastFile(value); @@ -286,6 +289,7 @@ namespace VisualPascalABC Options.Add(OptionsItemNameCodeCompletionNamespaceVisibleRange, UserOptions.CodeCompletionNamespaceVisibleRange); Options.Add(OptionsItemNameSaveSourceFilesIfComilationOk, UserOptions.SaveSourceFilesIfComilationOk); Options.Add(OptionsItemNameShowQuickClassBrowserPanel, UserOptions.ShowQuickClassBrowserPanel); + Options.Add(OptionsItemNameUseSemanticIntellisense, UserOptions.UseSemanticIntellisense); Options.Add(OptionsItemNameSkipStackTraceItemIfSourceFileInSystemDirectory, UserOptions.SkipStackTraceItemIfSourceFileInSystemDirectory); Options.Add(OptionsItemNameAutoInsertCode, UserOptions.AutoInsertCodeIsEnabledOnStartup); diff --git a/VisualPlugins/CompilerController/CompilerInformation.cs b/VisualPlugins/CompilerController/CompilerInformation.cs index a764b35c6..15bbc15a3 100644 --- a/VisualPlugins/CompilerController/CompilerInformation.cs +++ b/VisualPlugins/CompilerController/CompilerInformation.cs @@ -261,7 +261,7 @@ namespace VisualPascalABCPlugins private void cbUseSemanticForIntellisense_CheckedChanged(object sender, EventArgs e) { - CodeCompletion.DomSyntaxTreeVisitor.use_semantic_for_intellisense = cbUseSemanticForIntellisense.Checked; + //CodeCompletion.DomSyntaxTreeVisitor.use_semantic_for_intellisense = cbUseSemanticForIntellisense.Checked; } } } diff --git a/bin/Lng/Eng/VisualPascalABCNET.dat b/bin/Lng/Eng/VisualPascalABCNET.dat index 935bf8a06..e810a59b5 100644 --- a/bin/Lng/Eng/VisualPascalABCNET.dat +++ b/bin/Lng/Eng/VisualPascalABCNET.dat @@ -399,6 +399,7 @@ CODE_COMPLETION_PARAMS=Show tooltip when writing method calls CODE_COMPLETION_KEYPRESSED=Show tooltip by key pressing SHOW_INTELLISENCE_PANEL=Show quick class browser panel NAMESPACE_VISIBLE_RANGE=Level of nesting namespaces (0 - all) +USE_SEMANTIC_INTELLISENSE=Use compiler engine for code completion //CompilerOptions %PREFIX%=VP_OC_COMPILEROPTIONS_ diff --git a/bin/Lng/Rus/VisualPascalABCNET.dat b/bin/Lng/Rus/VisualPascalABCNET.dat index e0d1bdbe0..77c614ec3 100644 --- a/bin/Lng/Rus/VisualPascalABCNET.dat +++ b/bin/Lng/Rus/VisualPascalABCNET.dat @@ -399,6 +399,7 @@ CODE_COMPLETION_PARAMS=Подсказка параметров функций CODE_COMPLETION_KEYPRESSED=Подсказка по нажатию клавиши SHOW_INTELLISENCE_PANEL=Панель навигации по исходному коду NAMESPACE_VISIBLE_RANGE=Вложенность пространств имен (0 - все) +USE_SEMANTIC_INTELLISENSE=Использовать компилятор для Intellisense //CompilerOptions %PREFIX%=VP_OC_COMPILEROPTIONS_ diff --git a/bin/Lng/Ukr/VisualPascalABCNET.dat b/bin/Lng/Ukr/VisualPascalABCNET.dat index eb3cc8e55..c2c28dbd9 100644 --- a/bin/Lng/Ukr/VisualPascalABCNET.dat +++ b/bin/Lng/Ukr/VisualPascalABCNET.dat @@ -393,6 +393,7 @@ CODE_COMPLETION_PARAMS=Підказка параметрів функцій CODE_COMPLETION_KEYPRESSED=Підказка по натисканню клавіші SHOW_INTELLISENCE_PANEL=Панель навігації по вихідному коду NAMESPACE_VISIBLE_RANGE=Вкладеність просторів імен (0 - усі) +USE_SEMANTIC_INTELLISENSE=Использовать компилятор для Intellisense //CompilerOptions %PREFIX%=VP_OC_COMPILEROPTIONS_