1
1
import { getClosingBracket , getPhraseFromPosition , splitArgumentsString } from "../utils/parse"
2
2
import { completionsMap , subroutinesMap , workshopConstants } from "../stores/editor"
3
3
import { get } from "svelte/store"
4
+ import { getFirstParameterObject } from "../utils/compiler/parameterObjects"
4
5
5
6
let diagnostics = [ ]
6
7
@@ -103,6 +104,7 @@ function findIncorrectArgsLength(content) {
103
104
if ( item . label != name ) continue
104
105
105
106
let message = ""
107
+ let severity = "error"
106
108
107
109
if ( item . args_unlimited ) continue
108
110
@@ -126,22 +128,37 @@ function findIncorrectArgsLength(content) {
126
128
127
129
const splitContent = splitArgumentsString ( argumentsString )
128
130
129
- if ( item . args_min_length && splitContent . length >= item . args_min_length && splitContent . length <= item . args_length ) break
130
- if ( ! item . args_min_length && splitContent . length == item . args_length ) break
131
+ // Arguments string is a parameter object
132
+ if ( argumentsString . trim ( ) [ 0 ] === "{" ) {
133
+ const parameterObject = getFirstParameterObject ( content . slice ( match . index , closing + 1 ) )
131
134
132
- const expectedString = `${ item . args_min_length ? "Atleast" : "" } ${ item . args_min_length || item . args_length } `
133
- const maxString = `${ item . args_min_length ? ` (${ item . args_length } max)` : "" } `
134
- const givenString = `${ splitContent . length } given`
135
+ if ( ! parameterObject ) break
136
+
137
+ const invalidArgument = Object . keys ( parameterObject . given ) . filter ( i => i && ! parameterObject . phraseParameters . includes ( i ) )
138
+ if ( invalidArgument ?. length ) {
139
+ message = `Argument(s) "${ invalidArgument . join ( ", " ) } " are not valid for "${ name } "`
140
+ severity = "warning"
141
+ } else break
142
+ } else {
143
+ // Argument string is a regular list of arguments
144
+ if ( item . args_min_length && splitContent . length >= item . args_min_length && splitContent . length <= item . args_length ) break
145
+ if ( ! item . args_min_length && splitContent . length == item . args_length ) break
146
+
147
+ const expectedString = `${ item . args_min_length ? "Atleast" : "" } ${ item . args_min_length || item . args_length } `
148
+ const maxString = `${ item . args_min_length ? ` (${ item . args_length } max)` : "" } `
149
+ const givenString = `${ splitContent . length } given`
150
+
151
+ message = `${ expectedString } Argument(s) expected${ maxString } , ${ givenString } `
152
+ }
135
153
136
- message = `${ expectedString } Argument(s) expected${ maxString } , ${ givenString } `
137
154
}
138
155
139
156
if ( ! message ) break
140
157
141
158
diagnostics . push ( {
142
159
from : match . index + match . match . length - name . length ,
143
160
to : match . index + match . match . length ,
144
- severity : "error" ,
161
+ severity,
145
162
message : message
146
163
} )
147
164
0 commit comments